A modern, responsive web application for the Base community - a platform for builders and creators to feel at home. Homebase.
The Homebase website serves as a hub for the Base community, featuring:
- Live funding card for Based House, read from the creator fees the $home position has earned
- Interactive map of Homebase physical locations (Based Houses)
- Upcoming workshops and events with timezone support
- Video gallery of past events and workshops
- Farcaster Frame integration
- Framework: SolidJS with SolidStart
- Styling: TailwindCSS
- Build Tool: Vinxi
- Runtime: Bun
- Node.js 22.x or later
- Bun 1.2 or later
- Clone the repository
git clone https://github.com/yourusername/homebase-website.git
cd homebase-website- Install dependencies
bun install- Start the development server
bun run devVercel has no Bun runtime, no persistent disk for SQLite and nowhere to run the
calendar sync loop, so it serves the client as static files and answers
/events.json and /funding.json with functions in api/. The events function
parses the iCal feed per request and lets the CDN cache it for five minutes; the
funding answer is cached for two.
vercel.json carries the build command and the routing, so the only project
settings are the environment variables:
HOMEBASE_LIVE_ICAL— the calendar feed URL. Without it/events.jsonanswers with a 500 and the site renders with no events.HOMEBASE_FUNDING_ADDRESS— optional. The Bankr address holding the creator's share of the $home fees. It defaults to the address inapi/funding.ts, so this only needs setting to point the card somewhere else.HOMEBASE_BASE_RPC— optional. The Base JSON-RPC endpoint the fees are read from, defaulting to Base's public, rate-limitedhttps://mainnet.base.org, which each instance reads at most once a minute. A provider's URL works the same way, and a key in it never appears in an answer.
An empty value counts as unset for both optional variables.
$home's creator fees accrue in its pool's fee ledger, a Doppler hook on Base, and only reach the address when someone claims them. The card reads that ledger: the address's share of every WETH fee the pool has taken, collected or still waiting, which claiming does not lower. The address's balance shows only what has been claimed, and Bankr's API is no substitute: its lifetime total for the address read 0 while more than 1 WETH sat unclaimed.
api/funding.ts is the one fee read: the Bun route imports it rather than
keeping a copy. It keeps its last good answer for an hour and serves it at once
while it refreshes, and the CDN keeps serving the last answer for an hour when a
read fails, so a slow or failing read costs the card nothing until that hour
runs out. A read that takes over five seconds counts as failed.
The same build runs locally:
bun run build # writes dist/bun start runs the full Bun server — file router, SQLite and the calendar sync
job — which is what the Dockerfile and fly.toml deploy:
fly deployThe site integrates with Farcaster through the @farcaster/frame-sdk package, providing Frame support.