Apps
apps/web
The public-facing Aurea website - Next.js 15, reading journal content from the API over GraphQL.
Overview
apps/web is the public Aurea website. It runs on Next.js 15 (App Router). Journal content is
owned by the API (apps/api) and read over GraphQL - there is no CMS runtime in this app
(PayloadCMS was removed in plan 09; authoring moved to the dashboard staff console).
- Port: 3000
- Package name:
@aurea/web
Technology
| Concern | Library |
|---|---|
| Framework | Next.js 15 (App Router, RSC) |
| Content | API GraphQL (apps/api content module) via fetch |
| Rich text | Lexical state rendered by a local LexicalRenderer |
| Styling | Tailwind CSS 4 |
| UI components | @repo/ui |
Key environment variables
| Variable | Description |
|---|---|
INTERNAL_API_URL | Server-only API GraphQL endpoint for SSR/ISR journal reads |
NEXT_PUBLIC_API_URL | Browser API GraphQL endpoint (contact form) |
NEXT_PUBLIC_CMS_MEDIA_BASE_URL | Public R2/CDN base for cover images (host added to remotePatterns) |
NEXT_PUBLIC_SITE_URL | Canonical URL (e.g. http://localhost:3000) |
Journal
Articles are authored in apps/dashboard (/admin/journal) and stored in the API Postgres. The
public site reads them via src/app/(frontend)/journal/_lib/get-articles.ts (publishedArticles /
publishedArticle) and renders the Lexical body with journal/_components/LexicalRenderer.tsx.
Only published, past-dated articles are exposed.
Scripts
bun run dev # next dev --port 3000
bun run build # next build
bun run start # next start --port 3000
bun run test # vitest (LexicalRenderer parity test)