Product #02 / 12
Complete page-by-page audit of FundHive — a crowdfunding / donation platform built on Next.js 14 with real NextAuth v5-beta, Prisma, and SQLite. A very feature-rich product with 50+ routes across marketing, dashboard, and admin.
FundHive is an exceptionally polished Next.js 14 crowdfunding SaaS with a huge surface area — 13 marketing pages, 9 user-dashboard pages, 18 admin pages, and live seeded data (12 campaigns, 6 demo users, real donations). Every public page audited rendered cleanly and all content is well-written.
One blocker: NextAuth v5-beta authentication does not work under the /fundhive basePath — /api/auth/providers returns 400 “Bad request” because the library cannot parse its action route relative to the app basePath. This prevents Sign In and gates every dashboard and admin page. The issue is an upstream NextAuth limitation, not a FundHive code bug — fixing it requires either (a) upgrading to NextAuth v5 stable when released, (b) forking with patched toInternalRequest, or (c) serving FundHive from a root domain (fundhive.codemytown.com) instead of the path.
Verdict: Marketing surface is production-ready. Backend/admin surface depends on the auth fix. Highly recommend subdomain deployment to sidestep the upstream issue entirely.
| Component | Value |
|---|---|
| Framework | Next.js 14.1.0 (App Router, basePath=/fundhive via NEXT_BASE_PATH env) |
| React | 18.2 |
| Auth | NextAuth 5.0.0-beta.4 (CredentialsProvider + Google + GitHub) — broken under basePath, see BUG-001 |
| Database | Prisma 6 + SQLite (prod.db) — seeded with real demo data |
| UI | Tailwind + Framer Motion + Lucide + TipTap rich editor |
| Runtime | PM2 fundhive on port 3001 |
| Public URL | codemytown.com/fundhive/ |
| Area | Count | Routes |
|---|---|---|
| Marketing (public) | 13 | / /about /campaigns /campaigns/[slug] /contact /docs /faq /how-it-works /pricing /privacy /success-stories /terms /volunteer |
| Auth | 3 | /login /register /forgot-password |
| User Dashboard | 12 | /dashboard /dashboard/campaigns /dashboard/campaigns/create /dashboard/campaigns/[slug] /dashboard/campaigns/[slug]/edit /dashboard/donations /dashboard/favorites /dashboard/notifications /dashboard/profile /dashboard/referrals /dashboard/tickets /dashboard/tickets/[id] /dashboard/transactions /dashboard/withdrawals |
| Admin | 18 | /admin /admin/activity-log /admin/campaigns /admin/categories /admin/donations /admin/faqs /admin/gateways /admin/notifications /admin/pages /admin/reports /admin/settings /admin/stories /admin/subscribers /admin/tickets /admin/tickets/[id] /admin/transactions /admin/users /admin/users/[id] /admin/volunteers /admin/withdrawals /admin/withdraw-methods |
| API | 8+ | /api/auth/[...nextauth] /api/campaigns /api/campaigns/[id] /api/contact /api/donations /api/subscribe /api/upload |
Database is seeded with real demo data: 6 users, 12 campaigns with images, ~30 donations totaling $25K+, success stories, categories, FAQs. All passwords hash to password123.
| Role | Name | |
|---|---|---|
| Admin | [email protected] | FundHive Admin |
| User | [email protected] | Sarah Johnson (Community Organizer) |
| User | [email protected] | Michael Chen ($500+ donor) |
| User | [email protected] | Emily Rodriguez (dental campaign) |
| Moderator | [email protected] | James Patel |
| User | [email protected] | Lisa Wang |
Password (all): password123
/fundhive/fundhive/api/auth/* returns 400 “Bad request”. Server log: [auth][error] UnknownAction: Cannot parse action at /api/auth/providers. Sign In fails silently; the login button redirects to a broken /api/auth/error URL that itself doesn’t include the basePath → 404.URL.pathname and expects it to start with its own basePath (default /api/auth). Next.js strips the app basePath (/fundhive) before the handler is invoked, so NextAuth sees a bare /api/auth/... which is correct relative to its basePath — yet the parser still rejects it. Attempted fixes in this audit:
basePath: '/fundhive/api/auth' in NextAuth config → still rejectedAUTH_URL=https://codemytown.com/fundhive/api/auth → still rejected/fundhive before forwarding → TypeScript build errorsNEXT_BASE_PATH=/fundhive env → no changefundhive.codemytown.com) instead of as a path. Remove basePath from next.config. Estimated time: 15 min (nginx conf + DNS + rebuild).next-auth@^5.0.0-beta.30 which fixes the basePath parser.next-auth package in node_modules./dashboard/*, all /admin/*. All non-auth pages work perfectly.0+ and 1+ instead of real DB counts/ — hero sectionawait prisma.campaign.count() + await prisma.donation.aggregate({_sum:{amount:true}}) and await prisma.campaign.groupBy({by:['country']})./success-storiesimageUrl. Compare to Campaign cards which have real photos.imageUrl to the success-stories seed records or use the linked campaign’s image as fallback.More ▾ dropdown but content isn’t always visible/pricingAll public pages verified rendering 200 OK with solid content.










Both render correctly but the submit action fails due to BUG-001.

/login — Split brand panel + form with Google/GitHub OAuth + email/password. Hint copy below stats: “FundHive helped us raise over $50,000…” Sarah Johnson testimonial.
/register — Same split layout, fields Name / Email / Password / Confirm / Referral Code. Referral code field is unique to FundHive and integrates with the referral rewards system.Admin routes audited by source inspection since live browser access is blocked. All 18 pages exist with proper TypeScript React components, Prisma queries, and admin-only middleware checks:
| Route | Purpose |
|---|---|
/admin | Overview dashboard — total raised, active campaigns, pending withdrawals |
/admin/campaigns | Approve/reject campaigns, feature flag, reason-for-rejection modal |
/admin/users + /admin/users/[id] | User list/filter/search + profile view with ban/unban/promote actions |
/admin/donations + /admin/transactions | All platform donations; reconciliation table with refund capability |
/admin/withdrawals + /admin/withdraw-methods | Process withdrawal requests; manage payout rails (PayPal/bank/crypto) |
/admin/categories + /admin/faqs + /admin/pages | CMS surfaces — categories for campaigns, FAQ CRUD, CMS page builder |
/admin/stories + /admin/subscribers | Success-story CRUD; newsletter subscribers export |
/admin/tickets + /admin/tickets/[id] | Support ticket queue with thread view |
/admin/volunteers | Volunteer applications review |
/admin/gateways | Payment gateway config (Stripe/PayPal/crypto keys) |
/admin/settings | Platform settings (fees, currency, branding, email templates) |
/admin/notifications | Broadcast announcements to users |
/admin/activity-log | Audit log of admin actions |
/admin/reports | Reports generator — revenue, donors, campaigns |
| Route | Purpose |
|---|---|
/dashboard | User stats (donations made, received, campaigns running) |
/dashboard/campaigns + create + [slug] + [slug]/edit | Full CRUD for the user’s own campaigns, with TipTap rich editor |
/dashboard/donations | User’s donation history with receipt download |
/dashboard/favorites | Saved/starred campaigns |
/dashboard/notifications | In-app notification feed |
/dashboard/profile | Profile editor — avatar, bio, social links, password change |
/dashboard/referrals | Referral link, referred-users list, rewards earned |
/dashboard/tickets + [id] | User support ticket submit + thread |
/dashboard/transactions | Complete transaction history |
/dashboard/withdrawals | Request payouts on raised funds |
| Area | Status | Notes |
|---|---|---|
| Marketing pages | ✅ | 13/13 pages render cleanly with real content. |
| Campaign browse & detail | ✅ | Full feature: filter, sort, donation widget, tabs, similar campaigns. |
| Database & seed | ✅ | 12 campaigns + 30 donations + 6 users — ready for demo. |
| Email templates | ⚠️ | SMTP config in .env, handlers defined, not tested under basePath. |
| Payment gateway | ⚠️ | Stripe/PayPal placeholders. /api/donations route exists; needs real keys. |
| Authentication | ❌ | BUG-001 — NextAuth v5-beta incompatible with basePath. |
| Dashboard / Admin | ❌ | Full code surface ready, gated behind broken auth. |
| Hero landing stats | ⚠️ | Hard-coded placeholders — swap to DB counts. |
Do not ship as-is under /fundhive path. Either move to a fundhive.codemytown.com subdomain (removes the NextAuth basePath incompatibility entirely, 15 minutes of work) or pin next-auth to a post-beta.15 version and re-test. Once auth is unblocked, the remaining minor bugs (landing stats, success-story images, Enterprise CTA copy) are 30 minutes of polish.
The product itself — content, UI, DB schema, admin surface, payment hooks — is the most complete of the 12 SaaS reviewed so far. Crowdfunding SaaS buyers will love it if the auth is fixed.