Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
188 commits
Select commit Hold shift + click to select a range
9a1da79
feat(relaunch): reposition brand to AI builders & indie hackers
NiallJoeMaher Jun 6, 2026
0111f81
feat(relaunch): add /about manifesto page
NiallJoeMaher Jun 6, 2026
91d47ac
feat(relaunch): add AI developer jobs board
NiallJoeMaher Jun 6, 2026
a230a0e
feat(relaunch): add 26 AI-focused RSS sources to the content feed
NiallJoeMaher Jun 6, 2026
ee935a8
feat(relaunch): add dev-only kitchen-sink design playground
NiallJoeMaher Jun 6, 2026
70fa07f
feat(relaunch): wire relaunch fonts globally + rebuild kitchen sink a…
NiallJoeMaher Jun 6, 2026
94553e4
feat(relaunch): design tokens in Tailwind theme + reusable ds components
NiallJoeMaher Jun 6, 2026
6346858
feat(relaunch): rebuild homepage hero + funnel capture (content-as-fu…
NiallJoeMaher Jun 6, 2026
e70afc4
feat(relaunch): dark-only + new full-bleed marketing layout & homepage
NiallJoeMaher Jun 6, 2026
4189ba6
feat(relaunch): richer homepage feed cards with cover previews
NiallJoeMaher Jun 6, 2026
d867175
feat(relaunch): distraction-free auth in a bare (auth) layout + keep …
NiallJoeMaher Jun 6, 2026
e1bdae8
feat(relaunch): rebuild /about in the marketing layout
NiallJoeMaher Jun 6, 2026
694a01d
feat(relaunch): refresh app sidebar to tokens + replace gradient news…
NiallJoeMaher Jun 6, 2026
b82c0d3
feat(relaunch): refine marketing nav + record IndieHackers learnings
NiallJoeMaher Jun 6, 2026
f1a66ef
feat(relaunch): rebuild /advertise in marketing layout, recolor conta…
NiallJoeMaher Jun 6, 2026
d822c2e
feat(relaunch): kill orange/pink across the app + soften feed card hover
NiallJoeMaher Jun 6, 2026
d3139b8
feat(relaunch): add IndieHackers-style conversion hub to the feed rail
NiallJoeMaher Jun 6, 2026
f395911
feat(relaunch): engagement loop — points, daily streak & Build Board
NiallJoeMaher Jun 6, 2026
0afc320
feat(relaunch): retokenize feed/article cards + simplify feed taxonom…
NiallJoeMaher Jun 7, 2026
ef2ee20
feat(relaunch): premium ambient hero (aurora + constellation + reveal)
NiallJoeMaher Jun 7, 2026
41de128
feat(relaunch): badges/achievements (schema, award logic, profile dis…
NiallJoeMaher Jun 7, 2026
b85c236
feat(relaunch): WebGL GradientBlinds hero (themed mint) replacing the…
NiallJoeMaher Jun 7, 2026
b48f759
feat(relaunch): referral / invite loop → points + Connector badge
NiallJoeMaher Jun 7, 2026
fa6ea87
feat(relaunch): social platform — follow graph, Following feed, feed-…
NiallJoeMaher Jun 7, 2026
5458edc
feat(relaunch): follow notifications, achievements view, followers/fo…
NiallJoeMaher Jun 7, 2026
a9ca7c3
feat(relaunch): expand design tokens to full handoff system
NiallJoeMaher Jun 7, 2026
906607c
feat(relaunch): app shell — 3-col rail grid, top bar, ⌘K palette
NiallJoeMaher Jun 7, 2026
72c69ed
feat(relaunch): feed is the home — retire marketing landing
NiallJoeMaher Jun 7, 2026
6cb1ca2
feat(relaunch): editorial feed rows, reaction bar, composer, TIL/Ques…
NiallJoeMaher Jun 7, 2026
d02331a
feat(relaunch): editorial article reader + discussion thread
NiallJoeMaher Jun 7, 2026
72c9de4
feat(relaunch): write → auto-moderation → In review flow (env-gated)
NiallJoeMaher Jun 7, 2026
77487ef
feat(relaunch): Discussions surface
NiallJoeMaher Jun 7, 2026
d04c5c5
feat(relaunch): profile — gradient banner, tabs (Posts/Achievements/A…
NiallJoeMaher Jun 7, 2026
d271870
feat(relaunch): restyle jobs, notifications, saved, settings
NiallJoeMaher Jun 7, 2026
ec65925
feat(relaunch): auth split-screen + email provider gating
NiallJoeMaher Jun 7, 2026
2b5208f
feat(relaunch): info pages — slim back-bar, About manifesto, Advertis…
NiallJoeMaher Jun 7, 2026
f2fcc7c
feat(relaunch): a11y polish + e2e spec updates
NiallJoeMaher Jun 7, 2026
3a1c502
feat(relaunch): enable moderation + email admin; design-review shell …
NiallJoeMaher Jun 7, 2026
99a68a8
feat(relaunch): restyle the article editor and admin panel
NiallJoeMaher Jun 7, 2026
cde0709
feat(relaunch): backend foundations — user topics, live search, rate …
NiallJoeMaher Jun 7, 2026
e7e3be1
feat(relaunch): new-member onboarding flow + auth routing/copy
NiallJoeMaher Jun 7, 2026
9022191
feat(relaunch): advertise contact modal + drop newsletter price
NiallJoeMaher Jun 7, 2026
e949303
feat(relaunch): richer seed data for relaunch readiness
NiallJoeMaher Jun 7, 2026
71ee3a2
feat(relaunch): 3-col top bar, single Create entry point, edit-topics
NiallJoeMaher Jun 7, 2026
c1e4bad
feat(relaunch): flat feed filters + live ⌘K search
NiallJoeMaher Jun 7, 2026
04fecab
test(relaunch): update feed filters spec + add search/onboarding/crea…
NiallJoeMaher Jun 7, 2026
d866aa0
fix(relaunch): address self-review (mobile nav, discussion 404, write…
NiallJoeMaher Jun 7, 2026
0345116
fix(relaunch): null-slug duplicate keys + pink buttons
NiallJoeMaher Jun 8, 2026
abc89a2
feat(relaunch): seed cover images + tag slugs; refresh email copy
NiallJoeMaher Jun 8, 2026
99148d3
feat(infra): DynamoDB-backed rate limiting + CDK table
NiallJoeMaher Jun 8, 2026
eb5710c
fix(relaunch): mint top loader, kill stray pink, drop empty image box
NiallJoeMaher Jun 8, 2026
6c886a6
fix(relaunch): feed image top-right, mint focus rings, AA contrast bump
NiallJoeMaher Jun 8, 2026
392514d
feat(relaunch): settings tabs, profile cleanup, auth centering (diff #3)
NiallJoeMaher Jun 8, 2026
420e063
feat(relaunch): track onboarding wins + wire missing engagement awards
NiallJoeMaher Jun 8, 2026
d6724e6
feat(relaunch): responsiveness pass — hamburger + slide-out NavDrawer…
NiallJoeMaher Jun 8, 2026
7a872d5
fix(relaunch): tokenize inputs, settings dividers/theme, feed tab spa…
NiallJoeMaher Jun 8, 2026
d5f9a25
feat(relaunch): compose input polish + link card preview; drop editor…
NiallJoeMaher Jun 8, 2026
f7fc052
feat(relaunch): feed is the homepage at "/" (not /feed)
NiallJoeMaher Jun 8, 2026
5e86edb
fix(relaunch): tokenize feed error/empty states + loading skeleton
NiallJoeMaher Jun 8, 2026
57df2ce
fix(relaunch): tokenize remaining old-style surfaces
NiallJoeMaher Jun 8, 2026
3a24586
feat(relaunch): redesign discussion thread + fix duplicate header
NiallJoeMaher Jun 8, 2026
3bfe046
feat(relaunch): tokenize Catalyst ui-component primitives to the dark…
NiallJoeMaher Jun 8, 2026
339a92d
fix(relaunch): tokenize remaining live surfaces
NiallJoeMaher Jun 8, 2026
a7bd484
chore(relaunch): remove dead code orphaned by the redesign
NiallJoeMaher Jun 8, 2026
b7c2736
fix(relaunch): standalone form layout + mint radios; faster e2e default
NiallJoeMaher Jun 8, 2026
df19360
test(relaunch): fix specs for new routing; custom mint radios
NiallJoeMaher Jun 8, 2026
93257e8
test(relaunch): align notifications comment-flow with redesigned thread
NiallJoeMaher Jun 8, 2026
0a87517
test(relaunch): richer seed + specs for discussions, follow graph, pr…
NiallJoeMaher Jun 8, 2026
443d7fa
test(relaunch): onboarded /welcome redirect lands on "/" not /feed
NiallJoeMaher Jun 8, 2026
84a9798
test(relaunch): modernize editor/articles/saved specs for the new UI
NiallJoeMaher Jun 8, 2026
72d2200
docs(relaunch): trim verbose comments to clean developer docs
NiallJoeMaher Jun 8, 2026
2d52a89
chore: gitignore local.md (local-only deploy notes)
NiallJoeMaher Jun 8, 2026
a360e88
feat(relaunch): VoteControl pill — up/score/down voting (handoff #5 §1)
NiallJoeMaher Jun 8, 2026
149ab67
feat(relaunch): markdown rich-text editor + toolbar (handoff #5 §3)
NiallJoeMaher Jun 8, 2026
ed0ce33
feat(relaunch): onboarding celebration — confetti + badge unlock (han…
NiallJoeMaher Jun 8, 2026
fb91c9e
feat(relaunch): followable Publications (handoff #5 §2)
NiallJoeMaher Jun 8, 2026
37642a2
fix(security): dedupe points by NULLS NOT DISTINCT (review H1/H2)
NiallJoeMaher Jun 8, 2026
a5aac56
fix(security): comment rate limit, no self-comment points, "edited" b…
NiallJoeMaher Jun 8, 2026
3895b2d
fix(security): close remaining review findings (H3, M1/M3/M4, L1–L4, …
NiallJoeMaher Jun 8, 2026
1c31f4b
fix(relaunch): allow seed avatar/image hosts; feed header + chips; qu…
NiallJoeMaher Jun 8, 2026
7786f89
chore(relaunch): remove BuildBoard (legacy) + fix feed specs for remo…
NiallJoeMaher Jun 8, 2026
79d4994
feat(relaunch): follow discussions + All/Following tabs + sort filter
NiallJoeMaher Jun 8, 2026
6938178
docs(relaunch): trim comment noise from handoff #5 + fixes
NiallJoeMaher Jun 8, 2026
efd279d
test(relaunch): onboarding detects feed via For-you tab; bump editor …
NiallJoeMaher Jun 8, 2026
6e29498
style: prettier-format the relaunch + restore load-bearing eslint-dis…
NiallJoeMaher Jun 8, 2026
6e0f519
fix(relaunch): discussion reader on the canvas; opaque bordered type …
NiallJoeMaher Jun 8, 2026
af8ac70
chore(cdk): remove CodePipeline, add direct-deploy entrypoint + app I…
NiallJoeMaher Jun 8, 2026
c0dd07d
chore: remove unused Algolia integration
NiallJoeMaher Jun 8, 2026
dc06b4a
chore(cdk): clean up dead pipeline/Algolia leftovers
NiallJoeMaher Jun 8, 2026
11b56ce
fix(relaunch): security, correctness & cleanup from pre-review pass
NiallJoeMaher Jun 8, 2026
30fcc0c
fix(email): never send real email in test/E2E
NiallJoeMaher Jun 8, 2026
0294e39
refactor(relaunch): cut comment noise across the new code
NiallJoeMaher Jun 8, 2026
6bf9101
fix(auth): full-bleed brand panel on get-started, content centered in…
NiallJoeMaher Jun 8, 2026
8f64bfc
refactor(relaunch): sweep old-theme color leaks & retune button sizing
NiallJoeMaher Jun 8, 2026
bfca3d5
chore(relaunch): remove legacy courses feature
NiallJoeMaher Jun 8, 2026
aa1e04c
docs(moderation): brainstorm design + implementation plan
NiallJoeMaher Jun 8, 2026
f62cd08
chore(test): add vitest for unit tests
NiallJoeMaher Jun 9, 2026
0c9028b
feat(db): moderation columns, post report FK, pg_trgm
NiallJoeMaher Jun 9, 2026
22ca7cb
feat(url): add getAppOrigin() origin-only base-URL helper
NiallJoeMaher Jun 9, 2026
103ebb0
fix(email): moderation link points to /admin/moderation page (was /ap…
NiallJoeMaher Jun 9, 2026
953749c
refactor(email): de-duplicate base-URL builders onto getAppOrigin()
NiallJoeMaher Jun 9, 2026
4af91cc
feat: normalizeUrl for link dedupe
NiallJoeMaher Jun 9, 2026
207d33e
feat(moderation): freshness + similarity dedupe helpers
NiallJoeMaher Jun 9, 2026
97f6af8
feat: bedrock runtime client
NiallJoeMaher Jun 9, 2026
bee5748
feat(moderation): parseVerdict + fetchPage
NiallJoeMaher Jun 9, 2026
74fe6cf
feat(moderation): unified gatePublish helper + dedupe orchestrator + …
NiallJoeMaher Jun 9, 2026
2f2ffa2
refactor(moderation): route content & post routers through gatePublish
NiallJoeMaher Jun 9, 2026
2317cc8
refactor(moderation): symmetric gate field writes via applyGate + docs
NiallJoeMaher Jun 9, 2026
d75159a
feat(report): store post flags in DB queue + notify admin
NiallJoeMaher Jun 9, 2026
bd2aa5a
feat(report): route post flag button through DB mutation + add to fee…
NiallJoeMaher Jun 9, 2026
c26d44e
feat(admin): surface reported-live posts + note/hide moderation actions
NiallJoeMaher Jun 9, 2026
4e44b59
feat(admin): unified moderation queue UI + email deep-link
NiallJoeMaher Jun 9, 2026
a53f66a
feat(posts): authors can view their own in-review/hidden posts with a…
NiallJoeMaher Jun 9, 2026
c221117
feat(editor): reviewing-your-post loader + submitted-for-review state
NiallJoeMaher Jun 9, 2026
74cf77d
feat(cdk): grant app IAM user bedrock:InvokeModel for Haiku
NiallJoeMaher Jun 9, 2026
7156aac
chore(env): declare bedrock + moderation env vars
NiallJoeMaher Jun 9, 2026
9167494
test(e2e): moderation gate, flags, dedupe, and account-block regression
NiallJoeMaher Jun 9, 2026
25ed70c
fix(moderation): surface dedupe CONFLICT to user, clamp client status…
NiallJoeMaher Jun 9, 2026
8626db2
feat(404): interactive terminal not-found page
NiallJoeMaher Jun 9, 2026
e9d942a
feat(404): personalize terminal whoami + prompt with the logged-in ha…
NiallJoeMaher Jun 9, 2026
cc64074
chore(vercel): guarded vercel-build runs prod migrations before build
NiallJoeMaher Jun 9, 2026
c305917
feat(onboarding): app-wide first-win celebration with server-truth tr…
NiallJoeMaher Jun 10, 2026
fb011cf
feat(compose): auto-fill link title + persist OG description and image
NiallJoeMaher Jun 10, 2026
599a1e1
fix(feed): never link content cards to the broken /feed/:id route
NiallJoeMaher Jun 10, 2026
3a8a129
docs(plan): content URL restructure for SEO/AEO
NiallJoeMaher Jun 10, 2026
e1158bf
fix(seo): close current SEO regressions
NiallJoeMaher Jun 10, 2026
98a94cc
fix(content): never pass a React element to dangerouslySetInnerHTML
NiallJoeMaher Jun 10, 2026
a88e800
feat(db): add immutable urlId to posts for stable content URLs
NiallJoeMaher Jun 10, 2026
7cb47bf
feat(profile): reserve top-level namespaces from usernames
NiallJoeMaher Jun 10, 2026
22a37a4
feat(url): pure helpers for content url parsing + canonicalization
NiallJoeMaher Jun 10, 2026
ae101f3
refactor(url-id): extract shared mintUrlId to a single source of truth
NiallJoeMaher Jun 10, 2026
28ab888
feat(content): align post slugs to end with their urlId
NiallJoeMaher Jun 10, 2026
cacb962
feat(routing): resolve member content by urlId with 301 canonicalization
NiallJoeMaher Jun 10, 2026
67a3089
feat(feed): build content-card URLs from urlId
NiallJoeMaher Jun 10, 2026
921415e
feat(routing): /d/ discussions namespace (SSR) + 301 from legacy URLs
NiallJoeMaher Jun 10, 2026
eb7b5b4
feat(feed): discussion cards link to /d/
NiallJoeMaher Jun 10, 2026
8a3ba05
feat(routing): /s/ feed-sources namespace + aggregated canonical to s…
NiallJoeMaher Jun 10, 2026
0073ffd
feat(routing): de-overload /{username}, 301 sources to /s/
NiallJoeMaher Jun 10, 2026
2a9a6b1
feat(feed): aggregated link cards + source byline link to /s/
NiallJoeMaher Jun 10, 2026
9a92564
fix(seo): RSS-aggregated links self-canonical to Codú
NiallJoeMaher Jun 10, 2026
8dc4c85
feat(seo): DiscussionForumPosting JSON-LD on /d/
NiallJoeMaher Jun 11, 2026
dd633b6
feat(seo): ProfilePage JSON-LD
NiallJoeMaher Jun 11, 2026
90034bb
feat(seo): breadcrumbs on articles + discussions; honest Article date…
NiallJoeMaher Jun 11, 2026
086e67d
feat(seo): rebuild sitemap on new URL scheme, split content by type
NiallJoeMaher Jun 11, 2026
41d3402
feat(aeo): Bing IndexNow ping on publish/approve/edit
NiallJoeMaher Jun 11, 2026
6728723
feat(aeo): serve llms.txt
NiallJoeMaher Jun 11, 2026
9add28b
feat(profile): userReplies query
NiallJoeMaher Jun 11, 2026
2853b5d
feat(profile): Replies tab on user profiles
NiallJoeMaher Jun 11, 2026
b3eb7f9
test(e2e): seed deterministic routing fixtures
NiallJoeMaher Jun 11, 2026
c5e235c
test(e2e): content URL routing + redirects regression suite
NiallJoeMaher Jun 11, 2026
81a33ca
docs(plan): migration runbook
NiallJoeMaher Jun 11, 2026
10c08c1
feat(seo): lowercase-only usernames + explicit trailingSlash
NiallJoeMaher Jun 11, 2026
83ac96c
feat(seo): Article JSON-LD on member link posts
NiallJoeMaher Jun 11, 2026
f83a041
feat(seo): indexable /tag/{slug} pages
NiallJoeMaher Jun 11, 2026
4837b4a
test(e2e): update discussions/profile specs + teardown for new routing
NiallJoeMaher Jun 11, 2026
0131b05
feat(nav): surface My Posts / drafts entry points
NiallJoeMaher Jun 11, 2026
c590952
feat(compose): save draft from quick compose (discussion)
NiallJoeMaher Jun 11, 2026
9f7397b
feat(editor): remove user-facing post scheduling (moves to moderators)
NiallJoeMaher Jun 11, 2026
bed1c0f
feat(moderation): approve & schedule release time
NiallJoeMaher Jun 11, 2026
cfceaaf
feat(cron): promote due scheduled posts to published
NiallJoeMaher Jun 11, 2026
c153953
feat(cron): EventBridge rule + invoker lambda for scheduled-post prom…
NiallJoeMaher Jun 11, 2026
463f37f
refactor(404): extract shared TerminalShell for not-found + error pages
NiallJoeMaher Jun 12, 2026
3bdc62e
fix(security): block user self-scheduling and urlId-collision content…
NiallJoeMaher Jun 12, 2026
dc04f8e
fix(seo,security): revert username regex, fix NewsArticle URLs, escap…
NiallJoeMaher Jun 12, 2026
0630974
fix(cdk): grant cron lambda role CloudWatch logging permissions
NiallJoeMaher Jun 12, 2026
ad1660b
feat(username): case-insensitive handles (GitHub-style)
NiallJoeMaher Jun 12, 2026
2501147
fix(review): correct author URL host, drop dead redirect, stop cron e…
NiallJoeMaher Jun 12, 2026
90cc8aa
docs(review): correct stale /feed redirect comments, clarify Markdoc …
NiallJoeMaher Jun 12, 2026
edbbbbb
style: trim verbose comments to natural density
NiallJoeMaher Jun 12, 2026
fd61a2a
chore: remove orphaned /welcome onboarding route
NiallJoeMaher Jun 12, 2026
e490251
feat(alpha): remove hidden alpha editor and its legacy post write paths
NiallJoeMaher Jun 12, 2026
232649b
fix(review): close publish-path holes, dead links, and case-sensitivi…
NiallJoeMaher Jun 12, 2026
d3bc206
feat(seo): pre-merge SEO fixes from expert audit
NiallJoeMaher Jun 12, 2026
5d7162a
fix(redirects): 301 deleted /courses and /alpha URLs home
NiallJoeMaher Jun 12, 2026
d029165
feat(seo): server-render feed, discussions, /s/ namespace, and conten…
NiallJoeMaher Jun 12, 2026
19edd95
perf+sec: parallelize hot-path queries, roll out rate-limit middleware
NiallJoeMaher Jun 12, 2026
a05c9f8
refactor(cleanup): shared helpers, single origin constant, moderation…
NiallJoeMaher Jun 12, 2026
5b9230b
feat(achievements): onboarding badge, comment-based first win, confet…
NiallJoeMaher Jun 12, 2026
4a3179c
feat(dev): Mailpit local email catcher + e2e email coverage; fix brok…
NiallJoeMaher Jun 12, 2026
20de9e7
chore(deps): resolve all high/critical audit findings; stabilise e2e …
NiallJoeMaher Jun 12, 2026
a44493b
fix(review): close update-path moderation bypass + final-review findings
NiallJoeMaher Jun 12, 2026
2c11e32
fix(seo): make sitemap build-resilient so a DB-less build can't fail …
NiallJoeMaher Jun 13, 2026
ae3b9f2
docs(readme): reposition for AI builders & indie hackers; fix App Rou…
NiallJoeMaher Jun 13, 2026
1ba6c4a
chore(format): prettier-format relaunch files to unblock Code Quality CI
NiallJoeMaher Jun 13, 2026
fa42fe1
fix(cdk): upgrade RDS Postgres 14.5 -> 15.8 to match schema (NULLS NO…
NiallJoeMaher Jun 13, 2026
4616a86
fix(cdk): target PG 15.17 via .of() — valid upgrade path from 14.22
NiallJoeMaher Jun 13, 2026
d305702
docs(readme): correct deploy note — preview DOES migrate; note SSL re…
NiallJoeMaher Jun 13, 2026
5f723be
fix(cdk): pin custom PG15 parameter group with rds.force_ssl=1 explicit
NiallJoeMaher Jun 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ yarn-error.log*
# local env files
.env*
!.env.example
env.aws

# vercel
.vercel
Expand Down Expand Up @@ -71,3 +72,7 @@ ssmSetup.zsh

# Snyk Security Extension - AI Rules (auto-generated)
.github/instructions/snyk_rules.instructions.md

# Local-only deploy notes (never commit)
local.md
logs/
26 changes: 19 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

![Codu Logo](https://raw.githubusercontent.com/codu-code/codu/develop/public/images/codu-gradient.png)

> A space for coders
> A community for AI builders and indie hackers

Codú is the ultimate community of web developers to learn, share, and get support for your projects, either big or small. It is the perfect place to sharpen your skills and build your portfolio. In Codú, we're all here to help each other to grow as web developers. Plus, Codú makes it easier to find collaborators for your next big project.
Codú is a community for AI builders and indie hackers. Share what you're building, learn from people shipping real projects, and get support — whether it's a weekend experiment or a product you're taking to market. Write articles, post TILs, start discussions, ask questions, and find people to build with.

---

Expand Down Expand Up @@ -53,6 +53,14 @@ npm run db:migrate

The full command can be seen in our [package.json](/package.json#16) file.

> Deploy note: the Vercel Build Command runs `npm run db:migrate && npm run ci-build`
> on **every** target, so **both preview and production builds migrate** — preview
> against the shared dev database, production against prod. A migration that fails
> aborts the build, so a branch carrying a broken or environment-incompatible
> migration turns the Vercel check red. Connections require SSL
> (`sslmode=require` in `DATABASE_URL`) because the RDS instances run with
> `rds.force_ssl` on; local dev and e2e use Docker over localhost and need none.

7. Seed the database with some mock data by running:

```bash
Expand All @@ -69,17 +77,15 @@ npm run dev

After completion of the above commands, navigate to [http://localhost:3000](http://localhost:3000) in your browser to see the result.

You can start your journey by modifying `pages/index.tsx`. With the auto-update feature, pages update as you edit the file.

The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
The app uses the Next.js App Router — routes live in the `app/` directory and hot-reload as you edit. The home feed is served from `app/(app)/page.tsx`.

Learn more about API routes [here](https://nextjs.org/docs/api-routes/introduction).
API endpoints are [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers) under `app/api/*`, alongside the tRPC routers in `server/`.

## Environment Variables

### DATABASE_URL

The `DATABASE_URL` is a connection string to a PostgreSQL database (version 15.0).
The `DATABASE_URL` is a connection string to a PostgreSQL database (version 15).

By default, we point to a database running locally with Docker from our `docker-compose.yml` file.

Expand All @@ -89,6 +95,12 @@ Run the command `docker compose up`.

Alternatively, if you have PostgreSQL running locally, you can use your local connection string or grab one from a free service like [Supabase](https://supabase.com/docs/guides/database/connecting-to-postgres#finding-your-connection-string).

### Local email (Mailpit)

`docker compose up` also starts [Mailpit](https://mailpit.axllent.org/), a local email catcher. Set `EMAIL_PROVIDER=local` in your `.env` and every outgoing email (magic-link sign-in, moderation/report notifications) is captured at [http://localhost:8027](http://localhost:8027) instead of being sent through SES — no AWS credentials or real inboxes needed in development.

The email E2E spec (`e2e/email.spec.ts`) asserts delivery through Mailpit's API; it skips automatically when Mailpit isn't running. To include it: `EMAIL_PROVIDER=local npm run dev:e2e` (server) and `EMAIL_PROVIDER=local npm test` (tests).

### GITHUB_ID and GITHUB_SECRET

Currently, we only allow authentication via GitHub. To enable this, you need to have a `GITHUB_ID` and `GITHUB_SECRET` value.
Expand Down
6 changes: 4 additions & 2 deletions app/(app)/(tsandcs)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
<div className="prose mx-auto max-w-3xl dark:prose-invert lg:prose-lg">
{children}
<div className="bg-canvas text-fg">
<div className="prose mx-auto max-w-prose px-5 py-16 sm:px-8 sm:py-20">
{children}
</div>
</div>
);
}
Loading
Loading