← Back
The Morning Money
Technical skills demonstrated in this project
Product & frontend
- Next.js 16 App Router with React 19 and Tailwind CSS 4 for a clean, responsive UI.
- Local-first UX: clone and docker compose up gives a fully working app with local LLM, local email, and local storage.
- shadcn components with Lucide icons for a polished interface.
Data & persistence
- Prisma 7 as the data access layer with PostgreSQL 17 and pgvector extension for vector search capabilities.
- Dual connection layout: DIRECT_URL for migrations, DATABASE_URL for runtime queries via PrismaPg adapter.
- Announcements deduplicated by sourceHash; at most one email per user/day via DigestRun unique constraint.
Local LLM pipeline
- Ollama with gemma3:12b for local ASX announcement analysis — summary, sentiment, and directional insight.
- Daily digest pipeline: ingest PDFs from ASX, analyse via Ollama, compose digest, deliver via email.
- Cost efficient: one analysis per announcement, not per user — capped at O(announcements).
Email & automation
- Nodemailer for SMTP delivery in production; Mailpit captures and inspects all outbound email in development.
- Cron sidecar triggers the digest pipeline weekdays at 10am AEST, with manual trigger via shell script.
- Idempotent pipeline design prevents duplicate emails via unique constraints and sourceHash deduplication.
- Playwright e2e tests and Vitest unit tests ensure reliability across ingest, analysis, and delivery.
Next.jsTypeScriptTailwind CSSPrismaPostgreSQLDockerOllamaNodemailerpnpmPlaywright