App mobile-first per gestire le spese condivise tra conviventi: divisione personalizzabile per ogni tipologia di spesa, saldo sempre aggiornato, conguaglio guidato e un assistente IA che capisce le tu
翻譯準備中
金融TypeScript · JavaScriptGitHub @andreamontanaro上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證App per la gestione della divisione spese famigliare
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Mobile-first web app for transparently managing household expenses between two cohabiting partners. Every expense entered is shared by definition: 50/50 for rent, 60/40 for everything else (the partner with the higher income pays 60%). The app always shows the current balance and lets you settle it in one tap.檢視完整 README ↗Mobile-first web app for transparently managing household expenses between two cohabiting partners. Every expense entered is shared by definition: 50/50 for rent, 60/40 for everything else (the partner with the higher income pays 60%). The app always shows the current balance and lets you settle it in one tap.
It also keeps a shopping list — what's missing at home, by product type, quantity and urgency — with a receipt check that reads a photo of a receipt, ticks off what was bought and highlights what's still missing. The list can be managed from the app, from the AI assistant, or straight from the Telegram group.
For a full guide to the architecture, domain models, and patterns used in the project, see the Developer Wiki (in Italian).
@google/genai) for the AI assistantnpm install
The database schema (tables, views, RPCs, RLS) is defined in docs/casa_nostra_schema.sql, which is the authoritative source of truth for the applied schema.
docs/casa_nostra_schema.sql. (On an existing project, apply only the migrations from docs/migrations/ that it doesn't have yet.)public.profiles, following the example in section 9 (BOOTSTRAP dei due profili) at the end of the SQL script.Create a .env.local file in the project root (ignored by Git) with the following variables. Each one is documented in detail in docs/wiki/06-configuration.md.
# Supabase — Project Settings → API
NEXT_PUBLIC_SUPABASE_URL=https://<your-project>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<your-project-anon-key>
# Google Gemini — AI assistant (route /api/assistant)
GEMINI_API_KEY=<your-google-ai-studio-api-key>
# Optional — default: gemini-flash-lite-latest
GEMINI_MODEL=gemini-flash-lite-latest
# Telegram — optional: group notifications and in-chat assistant
# Full walkthrough: docs/telegram-setup.md
TELEGRAM_BOT_TOKEN=<token-from-botfather>
TELEGRAM_CHAT_ID=<group-chat-id>
TELEGRAM_WEBHOOK_SECRET=<random-string>
TELEGRAM_BOT_USERNAME=<bot-username-without-@>
SUPABASE_SERVICE_ROLE_KEY=<your-project-service-role-key>
NEXT_PUBLIC_SITE_URL=https://<your-app>.vercel.app
| Variable | Required | Scope | Description |
|---|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Yes | Client + Server | API endpoint of the Supabase project |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Yes | Client + Server | Supabase public "anon" key, enables RLS |
GEMINI_API_KEY | Yes | Server (secret) | Credential for calls to the Google Gemini API |
GEMINI_MODEL | No | Server | Gemini model to use (fallback: gemini-flash-lite-latest) |
TELEGRAM_BOT_TOKEN | For Telegram | Server (secret) | Bot token from @BotFather |
TELEGRAM_CHAT_ID | For Telegram | Server | Id of the group the bot posts to |
TELEGRAM_WEBHOOK_SECRET | For Telegram | Server (secret) | Shared secret verifying that updates really come from Telegram |
TELEGRAM_BOT_USERNAME | Recommended | Server | Bot username without @, used to detect mentions |
TELEGRAM_REPLY_MODE | No | Server | mention (default) or all — when the bot replies in the group |
SUPABASE_SERVICE_ROLE_KEY | For Telegram | Server (secret) | Lets the webhook read/write without a user session (bypasses RLS) |
NEXT_PUBLIC_SITE_URL | Recommended | Client + Server | Public app URL, used for links inside Telegram messages |
Leaving the Telegram variables unset simply keeps the integration off: the app behaves exactly as before.
npm run dev
Open http://localhost:3000. You'll be redirected to /login: sign in with one of the two accounts created in step 2.
npm run dev # development server (Turbopack)
npm run build # production build
npm run start # start the production build
npm run lint # lint the code (ESLint)
npm run telegram:setup -- chats # list chat ids that messaged the bot
npm run telegram:setup -- set https://<your-app>.vercel.app # register the bot webhook
npm run telegram:setup -- info # inspect webhook status
npm run telegram:setup -- delete # remove the webhook
On Windows, scripts/telegram-setup.ps1 walks through the whole Telegram setup in order — group id, secret, env vars to paste, deploy check, webhook registration — and reports which of the four failure causes it hit if the app isn't answering as it should:
.\scripts\telegram-setup.ps1 -AppUrl https://<your-app>
.\scripts\telegram-setup.ps1 -Info # webhook status and last error
.\scripts\telegram-setup.ps1 -RemoveWebhook
The reference deployment target is Vercel:
See the Next.js deployment documentation for further details.
docs/wiki/00-index.md — Developer Wiki (architecture, models, services, API, patterns) — in Italiandocs/casa_nostra_schema.sql — applied Supabase schemadocs/telegram-setup.md — Telegram bot setup (notifications, in-chat assistant, receipt checks)docs/migrations/ — incremental SQL migrations, in the order they were applieddocs/Casa_Nostra_Requisiti_MVP.docx — full functional requirements — in ItalianAGENTS.md — project conventions and development briefing — in Italian