Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Finance App For Personal Trainers
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Sessions, packages, monthly bills and studio rent for personal trainers, counted from Google Calendar.
src/app.js holds all the logic and screens. Each adapter only answers "where is the data" and "how do I read the calendar". Change the app once and both versions get it.
Then ask Claude to republish that file to the existing Trainer Tally link. Data paths never change, so everyone's data carries over.
About an hour of clicking, in this order.Read the full README ↗Sessions, packages, monthly bills and studio rent for personal trainers, counted from Google Calendar.
One codebase, two homes:
| claude.ai version (today) | Hosted version (launch) | |
|---|---|---|
| Runs in | a Claude artifact | your own domain on Vercel |
| Sign-in | the viewer's Claude account | Continue with Google |
| Calendar | the viewer's Claude Google Calendar connector | Google Calendar API (read-only) |
| Data | artifact database, private per viewer | Supabase, private per trainer (row-level security) |
| Built from | src/app.js + src/adapter-claude.js | src/app.js + src/adapter-hosted.js |
src/app.js holds all the logic and screens. Each adapter only answers "where is the data" and "how do I read the calendar". Change the app once and both versions get it.
src/
app.js engine + UI (shared)
styles.css design (shared; cream light + dark)
shell.html page frame (shared)
adapter-claude.js claude.ai storage + calendar
adapter-hosted.js Supabase storage + /api/calendar
api/
calendar.js Google Calendar proxy (read-only)
auth/store-token.js keeps the Google refresh token server-side
billing/*.js Stripe checkout, portal, webhook
supabase/schema.sql tables + row-level security
scripts/build-artifact.mjs builds the single-file claude.ai page
public/privacy.html privacy policy draft (needed for Google review)
npm run build:artifact # writes dist-artifact/index.html
Then ask Claude to republish that file to the existing Trainer Tally link. Data paths never change, so everyone's data carries over.
About an hour of clicking, in this order.
supabase/schema.sql → Run.https://YOUR-DOMAIN/privacy.html). Scopes: add .../auth/calendar.readonly. Under Test users, add Tatjana and anyone else testing (up to 100).https://YOUR-PROJECT.supabase.co/auth/v1/callbackhttps://YOUR-DOMAIN, and add http://localhost:3000 for local testing..env.example.APP_URL to it.Do all of this in a sandbox first, then repeat in live mode.
price_...).STRIPE_SECRET_KEY (never paste it into chat or commit it).https://YOUR-DOMAIN/api/billing/webhook, events:
checkout.session.completed, customer.subscription.created, customer.subscription.updated, customer.subscription.deleted, customer.subscription.paused, customer.subscription.resumed, invoice.paid, invoice.payment_failed.
Copy the signing secret into STRIPE_WEBHOOK_SECRET.STRIPE_AUTOMATIC_TAX=true (Massachusetts taxes SaaS; check with your accountant).VITE_BILLING_ENABLED=true. When the trial should start counting, set REQUIRE_SUBSCRIPTION=true; new sign-ups get TRIAL_DAYS free.How access works: the webhook re-reads each subscription from Stripe and stores access_until (end of the paid period + 2 days). active, trialing and past_due (while Stripe retries the card) keep the app unlocked; canceled, unpaid and expired checkouts lock it once access_until passes. A subscriber who taps Subscribe again is sent to the portal, not a second subscription.
Test cards: 4242 4242 4242 4242 succeeds, 4000 0000 0000 0341 fails on renewal. Any future date and any CVC.
While the consent screen is in Testing, only listed test users can sign in. To open it to everyone, click Publish app and submit for verification. calendar.readonly is a sensitive scope: Google asks for the privacy policy, a short screen recording of the sign-in and how calendar data is used, and domain verification. Typical turnaround is a few weeks. No paid security audit is needed for this scope.
/studio.html)For studio owners who rent space to trainers. Run supabase/studio.sql once after schema.sql.
This is the beginning of the README. Read the rest at the original. Read the full README ↗