A lexicon-driven AppView for ATProto.

Local Development from Source #

This guide runs HappyView directly with cargo run, with you managing Postgres, AIP, and Tap separately. If you'd rather use Docker Compose to run everything together, see Local Development with Docker.

Prerequisites #

  • Rust (stable)
  • PostgreSQL 17+
  • A running AIP instance (handles OAuth). See the AIP documentation for setup.
  • A running Tap instance (delivers real-time records and handles backfill). See the Tap documentation for setup.

1. Clone and configure #

git clone https://github.com/graze-social/happyview.git
cd happyview
cp .env.example .env

Edit .env to point at your running services:

DATABASE_URL=postgres://happyview:happyview@localhost/happyview
AIP_URL=http://localhost:8080
TAP_URL=http://localhost:2480
TAP_ADMIN_PASSWORD=your-secret-here

See Configuration for all available variables.

2. Create the database #

createdb happyview

Or if using a Postgres user with a password:

psql -c "CREATE DATABASE happyview;" -U postgres

HappyView runs migrations automatically on startup, so no manual migration step is needed.

3. Start HappyView #

cargo run

HappyView starts on port 3000 (configurable via the PORT environment variable).

Next steps #

Your HappyView instance is running. Follow the Statusphere tutorial to upload lexicons, add custom query logic, and start indexing records from the network.