Product: significanthobbies.com
Map your hobby history across life phases. Visualize insights. Share your journey. Discover what to explore next.
| Concern | Service |
|---|---|
| Hosting | Cloudflare Workers (significanthobbies) via @opennextjs/cloudflare; routes significanthobbies.com + www.significanthobbies.com. PRs deploy a significanthobbies-preview env on *.workers.dev. |
| Database | Cloudflare D1; Drizzle ORM |
| Auth | better-auth + Google OAuth |
| Analytics | PostHog via an isomorphic wrapper (src/lib/analytics.ts) — posthog-js in the browser, direct capture-API fetch in server actions |
| CI/CD | GitHub Actions (.github/workflows/deploy.yml) — manual production deploy from main |
pnpm install
cp .env.example .env # fill in your values
pnpm db:migrate:local # apply tracked migrations to local D1
pnpm db:seed # seed local D1 demo data
pnpm devOpen http://localhost:3000.
The application database is provided through the Cloudflare DB binding. Local
development uses the local-only binding in wrangler.local.toml; it does not
need a database URL or token.
| Variable | Required | Description |
|---|---|---|
BETTER_AUTH_SECRET |
Yes | openssl rand -base64 32 |
BETTER_AUTH_URL |
Yes | http://localhost:3000 in dev |
GOOGLE_CLIENT_ID |
Yes | From Google Cloud Console |
GOOGLE_CLIENT_SECRET |
Yes | From Google Cloud Console |
- Go to Google Cloud Console → APIs & Services → Credentials
- Create OAuth 2.0 Client ID (Web application)
- Add Authorized redirect URI:
http://localhost:3000/api/auth/callback/google - Copy Client ID + Secret into
.env
# Local database only; does not contact the production database
pnpm db:migrate:local
pnpm db:seedProduction migrations use pnpm db:migrate:remote only after an operator has
reviewed the migration receipt and explicitly approved the remote step.
pnpm test # vitest unit + accessibility
pnpm test:e2e # playwright (assumes pnpm dev is running on :3000)
pnpm test:e2e:ui # playwright UI mode| Route | Description |
|---|---|
A representative slice — src/app/ is the source of truth for the full route |
|
| set (Daily ritual, bucket lists, commitments, side quests, tools, SEO | |
| landing pages, etc.). |
| Route | Description |
|---|---|
/ |
Public landing for guests; post-onboarding dashboard when signed in |
/login |
Google sign in |
/onboarding |
First-use journey for identity, life history, intentions, and habits |
/daily |
Daily ritual — journal, habit check-ins, and one small new thing (private) |
/timeline/new |
Build a new timeline |
/timeline/[id] |
View/own your timeline with insights |
/timeline/[id]/edit |
Edit your timeline |
/u/[username] |
User profile + hobby portfolio |
/u/[username]/[slug] |
Shared timeline (public/unlisted) |
/b/[slug] |
Shared bucket list (public/unlisted) |
/find-your-hobby |
Hobby quiz (primary discovery UX) |
/hobbies |
Browse hobby categories (hidden from nav; SEO/deep-link) |
/hobbies/[hobby] |
Hobby detail |
/explore |
Public hobby timelines (hidden from nav; SEO/deep-link) |
- Framework: Next.js 16 App Router + TypeScript
- Database: Drizzle + Cloudflare D1
- Auth: better-auth (Google OAuth)
- UI: Tailwind CSS v4 + shadcn/ui + @dnd-kit for drag/drop
- Export: html-to-image (client-side PNG)
- Testing: Vitest (unit) + Playwright (e2e, with
@axe-core/playwrightfor accessibility)
- Timeline builder — drag/drop phases, add hobbies, auto-save for guests
- Insights — rekindled hobbies, persistence tracking, phase-by-phase changes
- Export — beautiful PNG card + JSON export
- Profile —
/u/[username]portfolio of your public timelines - Discovery — personalized hobby suggestions + directory
- Guest mode — build and export without an account
This historical task ledger is retained for context; new planning and marketing automation live in Fleet Workspace.
- Business lane: P1 Explore
- Rule: do not create another broad "improve the UI" task unless the acceptance criteria differ materially from the tasks listed here.
- Source of truth for current work: root
PROJECT_STATUS.md; Fleet Workspace owns cross-project automation.
| Task | Status | Priority | Last known note |
|---|---|---|---|
df83bb7f significanthobbies: fix Cloudflare 1015 rate-limit blocking homepage |
done | high | 2026-05-25 17:07:37 |
4692120d significanthobbies: add sample hobby journey and start CTA |
done | medium | 2026-05-26: added SampleJourneyCard to hero, simplified copy, updated primary CTA to "Start your hobby map →" |
6f687fd4 significanthobbies: add share-preview proof card |
done | medium | 2026-05-26: added ShareProofSection to landing — dark card preview with phase labels, personality archetype, share action strip (copy/Twitter/WhatsApp/PNG), "What your friends see" label, and "Share your map →" primary CTA |
d9e4af4d significanthobbies: add example gallery empty state |
done | low | 2026-05-26: CommunityGallery now shows 3 static sample cards with "Sample" badge + "Build and share yours →" CTA instead of returning null when demos are empty |