Dein Examen ist durch. Wir sagen dir, wann die Noten da sind.
Push notifications for exam results from German judicial examination offices (Justizprüfungsämter).
- Subscribe to notifications for any JPA (Justizprüfungsamt)
- Push notifications via ntfy to all your devices
- No app installation required - works with the ntfy app or in the browser
- No account needed - anonymous device IDs with recovery via ntfy
- Admin dashboard for managing JPAs with webhook documentation
- Frontend: React 19 + TanStack Start
- API: tRPC + React Query
- Database: Bun SQLite + Drizzle ORM
- Styling: Tailwind CSS v4 (Neobrutalism theme)
- Runtime: Bun
- Deployment: Railpack + Dokploy
- Bun (via mise:
mise install)
bun installCopy .env.example to .env.local and fill in your values:
cp .env.example .env.localRequired variables:
ADMIN_PASSWORD- Password for admin dashboard accessWEBHOOK_SECRET- Secret for authenticating webhook requests
# Generate migrations
bun run db:generate
# Apply migrations
bun run db:migrate
# Seed database
bun run db:seedbun run devVisit http://localhost:3000
bun run dev- Start development serverbun run build- Build for productionbun run preview- Preview production buildbun run check- Lint and format codebun run db:generate- Generate database migrationsbun run db:migrate- Apply migrationsbun run db:seed- Seed databasebun run db:studio- Open Drizzle Studio
src/
├── components/ # React components
├── db/ # Database schema and queries (Drizzle)
├── lib/ # Utilities (device ID, admin auth, tRPC, etc.)
├── routes/ # File-based routing
├── server/ # tRPC routers and procedures
└── styles.css # Global styles
Private