Public profile builder for real estate agents. Each agent gets a branded page at /:username with listings, reviews, lead capture, and widgets — a Linktree alternative built for real estate.
bun install
bunx prisma db push
bun dev| Framework | Next.js 16 · React 19 · TypeScript 5.9 |
| Database | PostgreSQL · Prisma 7 |
| Auth | Lucia v3 · Google OAuth (Arctic) |
| Payments | Stripe 19 |
| Storage | AWS S3 · CloudFront |
| Resend | |
| UI | Tailwind CSS 4 · DaisyUI 5 |
| i18n | next-intl 4 (EN / FR) |
| Infra | Pulumi (IaC) · AWS DynamoDB (rate limiting) |
Public agent page
- Customizable profile — photo, bio, brokerage, license, specialties
- Links with click tracking and icons
- Testimonials with star ratings
- Property listings with photo, price, beds/baths
- Widgets: mortgage calculator, home valuation, Calendly booking
- Contact / lead capture form
- Theme system: 8 base themes, 14 accent colors, font and radius controls
Dashboard
- Analytics: 7-day page views, link clicks, lead submissions
- Lead inbox + CRM integrations (Zapier, Follow Up Boss, Mailchimp)
- Billing portal: plan switching, invoice history
- Multi-session management with browser/OS tracking
- Live preview of public page
| Plan | Price |
|---|---|
| Solo | $19/mo · $15/mo annual |
| Pro | $39/mo · $31/mo annual |
Pro unlocks: listings, widgets (mortgage calculator, home valuation, Calendly), and CRM integrations (Zapier, Follow Up Boss, Mailchimp). New accounts get a 14-day trial.
Stripe handles checkout, billing portal, and webhooks. On new checkout, prior active subscriptions are automatically cancelled. Agents receive email notifications on payment failures and cancellation.
- Per-agent dynamic OG metadata (name, bio, avatar)
- Schema.org
RealEstateAgentJSON-LD withAggregateRating - ISR on public pages (revalidate every 3600s)
- Environment-aware
robots.txt(blocks crawlers on dev/preview) - Vercel Analytics + Speed Insights
- Auth — Lucia sessions (12-week expiry) with IP/browser/OS tracking. bcrypt for passwords. Google OAuth via Arctic.
- Rate limiting — DynamoDB sliding-window rate limiter with per-endpoint limits (e.g. login: 5 req/3min, contact: 3 req/hr). Graceful degradation on DynamoDB outage.
- Image pipeline — Presigned S3 uploads (5MB max, JPEG/PNG/WebP), served via CloudFront CDN. Old files deleted on replacement.
- CRM integrations — Lead submissions fan out asynchronously post-response to Zapier, Follow Up Boss, and Mailchimp. Non-blocking — does not affect response time.
- Infrastructure as code — AWS resources (S3, CloudFront, DynamoDB) provisioned with Pulumi. Separate dev/prod stacks.
- Theme system — Fully composable: base theme + accent color + button radius + font family/size. Applied via Tailwind classes and inline hex values; dashboard (DaisyUI) and public page use separate styling layers.
- Queue/retry mechanism for CRM webhook delivery (currently fire-and-forget)
- Activate remaining i18n locales (FR, DE, ES, PT, IT — config exists, routing disabled)
- Analytics event batching/sampling at scale
- Email format validation before forwarding leads to Follow Up Boss
- Complete Google Reviews auto-pull (referenced in upgrade modal, not yet implemented)
MIT