PART 14 OF 14

Current State & Lessons from 4.5 Months

December 27, 2025
16 min read

The Journey in Numbers

Timeline: August 11 - December 27, 2025 (138 days)

Code:

  • 290 total commits
  • 174 commits by primary developer
  • 50,000+ lines of TypeScript/TSX
  • 89 component files
  • 23 API routes

Tech Stack:

  • Next.js 15 + React 19
  • TypeScript (strict mode)
  • Drizzle ORM + Supabase PostgreSQL
  • Better Auth v1.3.34
  • Mapbox GL JS + PostGIS
  • Vercel AI SDK + OpenRouter
  • CopilotKit v1.10.6
  • shadcn/ui + Tailwind CSS 4

Features Shipped:

  • ✅ Interactive map with 500+ food banks
  • ✅ AI sous-chef with 7 tool integrations
  • ✅ Community posts, comments, karma system
  • ✅ Event hosting with RSVP and signup sheets
  • ✅ Provider claims with admin approval
  • ✅ Mobile-first responsive design
  • ✅ Production deployment on Vercel
  • ✅ Verification badges and trust indicators

What Went Right

1. The Starter Kit Foundation

Starting with a complete, opinionated stack saved weeks of setup time. By day 3, I had:

  • Authentication working
  • Database migrations
  • API routes
  • Deployment pipeline

The FoodShare pivot (Nov 5) happened smoothly because the foundation was solid.

Lesson: Invest in foundation quality upfront. Future you will thank you.

2. AI-Assisted Development

This project was built primarily with AI assistance (Claude, in fact). The workflow:

  1. Planning: AI generated comprehensive implementation plans
  2. Coding: AI wrote first drafts; I refined and tested
  3. Debugging: AI helped diagnose issues; I verified fixes
  4. Documentation: AI helped maintain context files

Productivity multiplier: ~3-5x faster than solo traditional development.

Lesson: AI assistance works best with:

  • Clear requirements
  • Strong TypeScript typing
  • Comprehensive context documentation
  • Iterative refinement

3. TypeScript Strictness

Enabling strict TypeScript from day one caught hundreds of runtime bugs at compile time:

// This would have caused production crashes
function getUserLocation(user: any) {  // ❌ any
  return user.savedLocations[0];  // Runtime error if null
}

// TypeScript forces defensive coding
function getUserLocation(user: User | null): SavedLocation | null {  // ✅
  return user?.savedLocations?.[0] ?? null;
}

Build errors > Runtime errors every time.

Lesson: Strict TypeScript is an investment that pays compounding returns.

4. Iterative UX Refinement

The glassmorphic auth modal (Part 11) replaced jarring page redirects. This one UX change dramatically improved perceived quality.

Small iterations:

  • Map popups → Bottom sheet
  • Multi-step wizard → Single modal
  • Separate creation flows → Unified drawer

Lesson: UX improvements have outsized impact. Test with real users early.

5. PostGIS Migration

Adding PostGIS (Part 12) delivered 100x speedup with minimal code changes:

  • Before: 1.2s queries fetching all data
  • After: 12ms spatial queries with indices

Lesson: Use the right tool for the job. Spatial databases exist for a reason.

6. Documentation as a First-Class Artifact

CLAUDE.md, context/state.md, and phase plans became the project's memory. AI agents could onboard instantly.

Lesson: Documentation isn't overhead - it's infrastructure for knowledge continuity.

What Went Wrong

1. The Blank Bubble Bug (Part 4, 7)

Spent 40+ hours debugging streaming chat issues before discovering CopilotKit. Should have:

  • Researched frameworks upfront
  • Used CopilotKit from day one
  • Avoided building custom streaming logic

Lesson: Don't reinvent solved problems. Framework research is time well spent.

2. Late PostGIS Migration (Part 12)

Migrating live data to PostGIS was risky. Should have:

  • Added geometry columns on day one
  • Populated during seeding, not after

Lesson: Anticipate scale requirements early. Spatial data = spatial database.

3. No Staging Environment (Part 10)

Deploying directly to production caused:

  • Database connection failures hitting live users
  • Authentication bugs blocking sign-ins
  • TypeScript errors breaking builds

Lesson: Staging environments aren't optional. Even solo projects need safe testing grounds.

4. Provider Dashboard Infinite Loading (Part 13)

As of December 27, the provider dashboard has an infinite loading bug. Root cause:

  • Missing error boundaries
  • No loading state timeout
  • Unclear data fetching logic

Lesson: Loading states, error boundaries, and timeouts aren't nice-to-haves.

5. Late Mobile Testing

Tested on desktop for 3 months, mobile for 2 weeks. This caused:

  • Map popups covering half the screen
  • Forms hard to fill on small keyboards
  • Touch targets too small

Lesson: Test on target devices from day one. Mobile isn't an afterthought.

6. No E2E Tests

Manual testing after every deployment was tedious and error-prone. Should have:

  • Set up Playwright on day one
  • Written tests for critical flows (sign-in, post creation, RSVP)
  • Automated deployment verification

Lesson: E2E tests save time and prevent regressions. The setup cost is worth it.

Key Technical Decisions Reviewed

✅ Wins

  1. Better Auth: Simpler than NextAuth, better TypeScript support
  2. Drizzle ORM: Type inference and raw SQL flexibility were crucial
  3. OpenRouter: Model flexibility saved $$ and enabled experimentation
  4. shadcn/ui: Owning component code prevented dependency hell
  5. Bun: Faster installs and builds than npm/pnpm
  6. Vercel: Deployment "just worked" (after configuration pain)

⚠️ Mixed

  1. CopilotKit: Great for streaming chat, but opaque internals made debugging hard
  2. Mapbox: Beautiful maps, but geocoding needed proxying
  3. Next.js 15: App Router is powerful but has edge cases

❌ Mistakes

  1. No Redis caching: Food bank queries could be cached for 5+ minutes
  2. No rate limiting: API routes are wide open to abuse
  3. No monitoring: No visibility into production errors or performance

What I Learned About Building Alone

Solo Development Patterns

Works Well:

  • AI pair programming for implementation
  • Context files for memory across sessions
  • Small, frequent commits
  • Documentation-driven development

Struggles:

  • Blind spots (no code review)
  • Decision fatigue (every choice falls on you)
  • Scope creep (no PM to say "not now")
  • Burnout risk (no teammates to share load)

AI-Assisted Development Tips

  1. Be Specific: "Add a button" vs "Add a glassmorphic button with icon, loading state, and keyboard shortcut"
  2. Iterate: First draft is never final. Refine in passes.
  3. Verify: AI can hallucinate. Test everything.
  4. Context: Maintain detailed context files. AI memory is limited.
  5. Learn: Don't just copy code. Understand it.

The Metrics That Matter

Not these:

  • Lines of code written
  • Commits per day
  • Technologies used

But these:

  • Real users helped: Have food-insecure people found resources?
  • Time saved: Did AI chat reduce friction vs Googling?
  • Community built: Are neighbors connecting?
  • Provider empowerment: Can food banks manage their data?

TheFeed is live but hasn't reached impact yet. That's the next chapter.

What's Next: The Roadmap

Immediate (Next 2 Weeks)

  1. Fix Provider Dashboard: Debug infinite loading
  2. Add E2E Tests: Playwright for critical flows
  3. Mobile Polish: Fix remaining touch/keyboard issues
  4. Monitoring: Add Sentry for error tracking

Short-Term (Next Month)

  1. User Onboarding: Guided tour for new users
  2. Email Notifications: Event reminders, comment replies
  3. Search Improvements: Full-text search for posts/events
  4. Analytics Dashboard: Track usage, engagement

Medium-Term (Q1 2026)

  1. Mobile App: React Native PWA wrapper
  2. Push Notifications: Real-time event updates
  3. Advanced Moderation: Automated content filtering
  4. Multi-City Expansion: Beyond Sacramento

Long-Term (2026+)

  1. 501c3 Nonprofit: Formalize organization
  2. Grant Funding: USDA, local food security grants
  3. Partner Integrations: Feeding America, 211 APIs
  4. Community Guides: Recruit neighborhood ambassadors

Advice for Others Building Similar Projects

1. Start with the Problem, Not the Tech

I spent 83 days with a starter kit before finding the real problem (food insecurity). Ship faster by:

  • Talking to users first
  • Validating the problem exists
  • Building the MVP in parallel with research

2. Use AI Assistants Wisely

AI is a multiplier, not a replacement:

  • ✅ Great for: Boilerplate, refactoring, debugging, documentation
  • ❌ Poor for: Architecture decisions, UX design, domain expertise

3. Invest in Developer Experience

Tools that save time:

  • Strict TypeScript (catch errors early)
  • Fast dev server (Bun + Turbopack)
  • Good linting (ESLint + Prettier)
  • Context documentation (CLAUDE.md)
  • Terminal debuggers (dev-terminal-chat.ts)

4. Ship Early, Iterate Fast

Don't wait for perfection:

  • Vercel deploy took one day (after fixing issues)
  • Users forgive bugs if you fix them fast
  • Real feedback > imagined requirements

5. Document Your Journey

This blog series forced reflection on decisions. Writing:

  • Clarifies thinking
  • Preserves context
  • Helps future contributors
  • Teaches others

The Bigger Picture

TheFeed isn't just a technical project. It's an attempt to solve real human problems with technology:

  • Food insecurity affects 1 in 8 Americans
  • Social isolation worsens food access
  • Information gaps prevent resource utilization
  • Dignity matters in how we design solutions

The tech choices (PostGIS, CopilotKit, Better Auth) matter less than whether someone who's hungry finds a meal because of this app.

That's the metric I'll measure success by.

Final Thoughts

Building TheFeed taught me:

  1. AI-assisted development is real: 3-5x productivity gains with careful prompting
  2. Foundations matter: Starter kit quality determined velocity
  3. Iterate on UX: Small changes have outsized impact
  4. Document everything: Context files are infrastructure
  5. Ship imperfect: Production teaches more than localhost
  6. Solo is hard: AI helps, but code review and collaboration matter
  7. Impact > tech: Choose tools for user outcomes, not resume bullets

Thank You

If you've read all 14 posts, thank you. This series documents 4.5 months of intense building, learning, and iteration.

The code is open source. The app is live. The journey continues.

If you're building something similar - a food-sharing network, a community platform, or any social-impact project - feel free to reach out. I'm happy to share what I've learned.

Here's to helping more people find food, build community, and thrive.

— Zenchant


Series Complete

This concludes the TheFeed Development Journey blog series. All 14 parts:

  1. Genesis: From Starter Kit to Vision
  2. The FoodShare Pivot: Finding the Real Problem
  3. Building the Map: Food Bank Discovery with Mapbox
  4. The AI Sous-Chef: Chat Tools and OpenRouter
  5. Building Community: Posts, Comments, and Social Features
  6. Event Hosting: Enabling Community Potlucks
  7. The CopilotKit Migration: Upgrading AI Chat
  8. Data Quality Crisis: Geocoding and Validation
  9. Trust & Verification: Building User Confidence
  10. Going Live: Production Deployment to Vercel
  11. The UX Redesign: Glassmorphic Auth and Mobile-First
  12. Performance & Scale: PostGIS Integration
  13. Provider Claims: Empowering Resource Owners
  14. Current State & Lessons from 4.5 Months (this post)

Key Commits: 2af182a (first commit) to present (290 commits)

Related Files: Every file in the repository 😄


JH

Jordan Hindo

Full-stack Developer & AI Engineer building in public. Exploring the future of agentic coding and AI-generated assets.

Get in touch