← All work

Becoming

A live, database-backed personal-growth dashboard that turns a yearly vision into seasons, daily check-ins, and a computed season recap — solo AI-assisted hackathon prototype, later hardened.

Hackathon prototype

Summary

Becoming connects a yearly vision → seasonal goals → daily check-ins → a computed recap (weighted season score, gem level, contribution heatmap). It reads a single pre-seeded dataset from AWS Aurora via Prisma. There is no authentication; one shared demo user. Multi-user support exists only in the schema.

My role and contribution

Solo hackathon prototype assembled with heavy AI assistance (Cursor, ChatGPT, Vercel v0 UI, components adapted from libraries such as ReactBits). After the hackathon I audited and hardened the repo: gated mutating server actions behind DEMO_WRITES_ENABLED (off by default), added validation and rate limiting, validated database TLS against the RDS CA, and added automated authorization/validation tests. I'm continuing to study some of the deeper application paths. The original README was drafted with AI help; this page was written and checked by me.

Status

Live on Vercel. Public site is intended read-only unless writes are explicitly enabled. Not a product and not production-grade multi-user software.

Technology

Next.js App Router, React, TypeScript, Tailwind, Prisma 7 with @prisma/adapter-pg, AWS Aurora PostgreSQL, Vercel. Scoring lives in a pure module (lib/scoring.ts) separate from the query layer. No in-app AI runtime features.

Problem

Habit trackers often answer “did you do the thing?” Becoming tries to answer whether a season added up to the person you said you would become.

User workflow

Server-rendered dashboard and wrapped views read the shared seeded dataset. Check-in and demo seed/reset actions exist in code but are disabled by default. Onboarding and season-creation pages are presentation-only and do not persist.

What I personally built

  • Directed the AI-assisted prototype and deployed it.
  • Post-hackathon hardening: write gate, input validation, in-memory rate limiting, validated TLS, demo-user resolution, tests covering authorization and prohibited writes.

Architecture or data flow

Server Components for reads; Server Actions for writes (gated). Prisma against Aurora. Year Wrapped may mix mock data in places — treat as partially data-driven. Live reads depend on CA certificate env configuration on Vercel.

Engineering decisions

Separate scoring from Prisma queries. Prefer an explicit write flag over leaving unauthenticated mutations open on a shared demo. Validated TLS instead of certificate validation turned off.

AI-assisted development

Cursor and ChatGPT for planning and code; Vercel v0 for the UI; components adapted from third-party libraries. Adding license attribution for those components is still on my list.

Quality and verification

20 automated tests covering authorization, validation, and prohibited writes, run with npm test, plus scoring tests that don't need a database. There is no CI workflow yet. The dashboard read paths were verified rendering real data; check-in submit and demo reset were not triggered in that review.

Edge cases and failure handling

Write/reset paths blocked when DEMO_WRITES_ENABLED is off. Rate limiting is in-memory per instance (not a global quota). Aurora firewall and CA env are owner-managed infrastructure — not fully verifiable from the repo alone.

Known limitations

  • No authentication / no per-user isolation — shared public demo by design.
  • Onboarding and season creation do not persist.
  • Year Wrapped may include mock data.
  • Build still ignores some type errors in config.
  • Not production-ready, scalable, or “fully secure” as a multi-user product.

Next improvements

Confirm the Aurora security-group setup, add CI for npm test, keep deepening my working knowledge of the stack, and attribute third-party UI licenses.

Demo, repository, screenshots, and tests

Last verified date

July 2026 — post-hardening review.