{"slug": "book-the-lakehouse-a-beautiful-oss-booking-calendar-for-holiday-homes", "title": "Book the lakehouse – A beautiful OSS booking calendar for holiday homes", "summary": "Shrimbly released Book the Lakehouse, an open-source booking calendar application designed for families sharing a holiday home. The MIT-licensed tool, built with Next.js, React, Drizzle, Neon, and Vercel Blob, allows family members to claim dates on a shared calendar using a PIN, with optional cost tracking and payment prompts. The application includes a \"Mary mode\" admin area for trusted users to manage bookings and payments, and can be deployed through Vercel with automated setup scripts.", "body_md": "[MIT licensed](/shrimbly/book-the-lakehouse/blob/master/LICENSE) · built with Next.js, React, Drizzle, Neon, and Vercel Blob\n\nA small app for sharing the family holiday home without turning the family chat into a booking tribunal: a private calendar with a shared PIN, optional stay costs, bank transfer details, photos from the trip, and just enough ceremony to keep everyone honest.\n\nFor families with a lakehouse, bach, cabin, cottage, or other beloved place that people take turns using.\n\n- Pick your identity, then claim dates on a spacious month calendar.\n- Edit and delete your own stays — no global admin powers required.\n- Optional nightly costs, bank details, and a transfer prompt at booking time.\n**Mary mode**— a quiet admin area where trusted users can tick off paid stays.- Profile and stay photos when Vercel Blob is configured.\n- Runs locally with demo data before you connect Neon.\n- Rename the place, people, footer, PIN, colors, and cookie prefix to suit your own family.\n- Agent-friendly: hand the codebase to an AI assistant, or run\n`/setup`\n\n(or`npm run setup`\n\n) to wire up database, storage, and family settings in one go.\n\nMary mode is named for my aunt Mary, who embodies the idea of an admin far better than the word \"admin\" ever could.\n\n## btl-1.mp4\n\nIf you have an AI coding assistant, type `/setup`\n\nin the chat. Otherwise run\nthe interactive wizard:\n\n```\nnpm run setup\n```\n\nIt checks the Vercel CLI, walks you through linking the Neon Postgres and Vercel Blob integrations, pulls the connection strings down for you, prompts for your family-specific settings (PIN, site title, nightly costs, bank details, admins), and runs the initial schema push and seed.\n\nOnce it finishes, you're good to go.\n\nIf you prefer to configure the application manually:\n\n- Fork and clone this repo.\n- Create a\n[Vercel](https://vercel.com/pricing)project from your fork. The Hobby plan is a good starting point for personal use. - Add the\n[Neon integration for Vercel](https://vercel.com/marketplace/neon). It creates the Postgres database and wires the database environment variables for you. Neon's Free plan is fine for getting started. - Add the\n[Vercel Blob integration](https://vercel.com/docs/storage/vercel-blob)if you want profile photos and stay photos. Vercel handles the Blob environment variable too. - Add your app-specific settings from\n`.env.example`\n\n, especially`FAMILY_PIN`\n\nand the`NEXT_PUBLIC_*`\n\ndisplay text. - Run\n`npm run db:push`\n\nonce, then`npm run db:seed`\n\nto add starter people and sample bookings.\n\nThat is the whole shape of it: Vercel runs the app, Neon keeps the calendar, and Blob stores the nice little photos.\n\nFor tinkering before deployment:\n\n```\ngit clone https://github.com/shrimbly/book-the-lakehouse.git\ncd book-the-lakehouse\nnpm install\ncp .env.example .env.local\nnpm run dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000).\n\nWith only `.env.example`\n\ncopied, the app can render with demo data. Add\n`DATABASE_URL`\n\nwhen you are ready for real bookings to stick around.\n\nCreate `.env.local`\n\nin the project root:\n\nMost of the database, Blob storage, and Vercel-specific values can be created for you by the Vercel Neon and Vercel Blob integrations. Once they exist in Vercel, pull them down locally with:\n\n```\nvercel env pull .env.local\n```\n\nThen add the app-specific bits, like `FAMILY_PIN`\n\n, display text, Marys, and any\noptional stay-cost details.\n\n```\nFAMILY_PIN=1234\nDATABASE_URL=postgres://...\nBLOB_READ_WRITE_TOKEN=vercel_blob_rw_...\n\nBOOKING_COST_PER_NIGHT=50\nBOOKING_COST_CURRENCY=NZD\nPAYMENT_ACCOUNT_NAME=\"Lakehouse Account\"\nPAYMENT_ACCOUNT_NUMBER=\"12-3456-7890123-00\"\nPAYMENT_REFERENCE=\"Lakehouse stay\"\nPAYMENT_NOTE=\"Please transfer after booking.\"\nMARY_IDS=mary\n\nNEXT_PUBLIC_HOME_NAME=\"Book the lakehouse\"\nNEXT_PUBLIC_SITE_DESCRIPTION=\"A private family booking calendar for the lakehouse.\"\nNEXT_PUBLIC_FOOTER_TEXT=\"Book the lakehouse\"\nNEXT_PUBLIC_REPO_URL=\"https://github.com/shrimbly/book-the-lakehouse\"\nCOOKIE_PREFIX=book-the-lakehouse\n```\n\nOnly `FAMILY_PIN`\n\nis needed for the PIN gate. `DATABASE_URL`\n\nenables the real\ndatabase-backed calendar. `BLOB_READ_WRITE_TOKEN`\n\nenables photos.\n`BOOKING_COST_PER_NIGHT`\n\nturns on the cost and bank-transfer prompt.\n`MARY_IDS`\n\nis a comma-separated list of person IDs for Marys, the admin users\nwho can open `/mary`\n\nand check off paid stays.\n\nThis project uses Drizzle with Neon Postgres.\n\n```\nnpm run db:generate\nnpm run db:push\nnpm run db:seed\n```\n\n`src/lib/data.ts`\n\ncontains the starter people and bookings used by both demo\nmode and `npm run db:seed`\n\n. Swap them out for your own family, then seed again.\n\nRun `npm run db:push`\n\nafter pulling changes that add Mary mode, because bookings\ninclude a persisted `payment_settled`\n\nchecklist field.\n\nUseful database commands:\n\n```\nnpm run db:studio\n```\n\n| Path | Purpose |\n|---|---|\n`src/app/` |\nNext.js app route, metadata, and Server Actions. |\n`src/app/mary/` |\nMary mode checklist view for tracking stay payments. |\n`src/components/` |\nCalendar, identity, PIN, photo, and month UI. |\n`src/db/` |\nDrizzle schema, client, queries, and seed script. |\n`src/lib/site.ts` |\nReusable site branding and cookie configuration. |\n`src/lib/data.ts` |\nDemo and seed data for people and sample bookings. |\n\n```\nnpm run dev          # Start the local Next.js dev server\nnpm run build        # Build for production\nnpm run start        # Run the production build\nnpm run lint         # Run ESLint\nnpm run db:generate  # Generate Drizzle migrations\nnpm run db:push      # Push schema changes to DATABASE_URL\nnpm run db:seed      # Seed people and bookings from src/lib/data.ts\n```\n\n| Tool | Why |\n|---|---|\n| Next.js 16 | App Router, Server Components, Server Actions, and metadata. |\n| React 19 | Client interactions for picking, dragging, uploading, and editing. |\n| Drizzle | Typed schema and query helpers for Postgres. |\n| Neon | Serverless Postgres that deploys cleanly on Vercel. |\n| Vercel Blob | Simple public image storage for profile and stay photos. |\n| Tailwind CSS 4 | Quiet, responsive styling with a small custom palette. |\n\nPRs are welcome, especially improvements that make the calendar easier for another family to adopt. Keep it small, private-by-default, and friendly to people who just want to book a weekend away without learning a new system.\n\nMIT.", "url": "https://wpnews.pro/news/book-the-lakehouse-a-beautiful-oss-booking-calendar-for-holiday-homes", "canonical_source": "https://github.com/shrimbly/book-the-lakehouse", "published_at": "2026-05-27 01:29:13+00:00", "updated_at": "2026-05-27 01:56:00.355594+00:00", "lang": "en", "topics": ["ai-tools"], "entities": ["Next.js", "React", "Drizzle", "Neon", "Vercel Blob", "MIT"], "alternates": {"html": "https://wpnews.pro/news/book-the-lakehouse-a-beautiful-oss-booking-calendar-for-holiday-homes", "markdown": "https://wpnews.pro/news/book-the-lakehouse-a-beautiful-oss-booking-calendar-for-holiday-homes.md", "text": "https://wpnews.pro/news/book-the-lakehouse-a-beautiful-oss-booking-calendar-for-holiday-homes.txt", "jsonld": "https://wpnews.pro/news/book-the-lakehouse-a-beautiful-oss-booking-calendar-for-holiday-homes.jsonld"}}