Setup guide · from zero to live
Ultimate AI Studio on ultimate-ai.studio
About 45 minutes. You need no programming – only copy, paste and click. Work through the steps in order and tick the checklist at the end.
Create the accounts you need
- Supabase (database, sign-in, AI functions) – free: supabase.com → Start your project.
- Cloudflare (hosting, free SSL) – free: dash.cloudflare.com.
- Google AI Studio (Gemini key for chat, images, video, speech): aistudio.google.com/apikey → Create API key → copy it.
- Optional: OpenRouter (free open models such as DeepSeek, Qwen, Llama): openrouter.ai/keys → Create key.
- Your domain ultimate-ai.studio at IONOS (you have it already).
- Unzip
ultimate-ai-studio.zipon your computer. You get a folderultimate-ai-studiowith two parts:website(goes to Cloudflare) andsupabase(goes to Supabase).
Create the Supabase project
- Supabase → New project. Name:
ultimate-ai-studio. Region: Central EU (Frankfurt). Set a strong database password and keep it safe. - Wait ~2 minutes until the project is ready.
- Open Project Settings → API (or Data API). Copy two values into a note:
Project URL, e.g.https://abcd1234.supabase.co
Publishable key (or anon public key), starts withsb_publishable_oreyJ…
Never use the service_role / secret key in the website. It stays inside Supabase.
Create the database
- Supabase → SQL Editor → New query.
- Open the file
supabase/setup.sqlfrom the folder with a text editor, select all, copy, paste into the editor. - Click Run. You should see Success. No rows returned.
This creates accounts, plans (Free/Pro), Studio chats, skills, media, usage, support tickets, team chat, mail, live updates and the storage bucket
ai-studio.Sign-in settings
- Supabase → Authentication → URL Configuration:
Site URL:https://ultimate-ai.studio
Redirect URLs → Add URL:https://ultimate-ai.studio/**andhttps://www.ultimate-ai.studio/**(and later your*.pages.devaddress, see step 6). - Authentication → Providers → Email: keep enabled. Confirm email on (recommended).
- Google sign-in (optional): in Google Cloud Console → Create credentials → OAuth client ID → Web application. Authorized redirect URI:
https://YOUR-PROJECT.supabase.co/auth/v1/callback
Copy Client ID and Secret → Supabase → Providers → Google → paste → Save.
Install the AI functions
- Supabase → Edge Functions → Deploy a new function → Via Editor.
- Function name:
ai-studio. Delete the sample code, paste the content ofsupabase/functions/ai-studio/index.ts, click Deploy. - Repeat with name
ai-freeand the filesupabase/functions/ai-free/index.ts. - For both functions: Details → Verify JWT must be on.
- Edge Functions → Secrets (or Manage secrets) → add:
GEMINI_API_KEY= your Google AI Studio keyOPENROUTER_API_KEY= your OpenRouter key (optional)
Video (Veo) and some image models need billing enabled in Google AI Studio. Chat with Gemini Flash-Lite also works on the free tier.
Put your keys into the website
- Open
website/assets/config.jswith a text editor (Notepad, TextEdit in plain-text mode, VS Code). - Replace the two placeholders with your values from step 1 and save:
window.UA_CFG = {
url: 'https://abcd1234.supabase.co',
key: 'sb_publishable_xxxxxxxxxxxxxxxx',
supportEmail: 'support@ultimate-ai.studio'
};Publish on Cloudflare Pages
Option A – upload (fastest):
- Cloudflare → Workers & Pages → Create → tab Pages → Upload assets.
- Project name:
ultimate-ai-studio→ Create project. - Drag the contents of the folder
website(index.html, assets, studio, chat … – not the folder itself) into the upload area → Deploy site. - You get an address like
https://ultimate-ai-studio.pages.dev. Addhttps://ultimate-ai-studio.pages.dev/**to the Supabase redirect URLs (step 3).
Option B – automatic from GitHub: create a private repository, upload the contents of website, then Cloudflare → Pages → Connect to Git → choose the repository → Framework preset None, build command empty, output directory / → Save and Deploy. Every upload to GitHub then publishes automatically.
Upload only
website. The supabase folder is used in steps 2 and 4 and is not part of the site.Connect ultimate-ai.studio (IONOS → Cloudflare)
- Cloudflare dashboard → Add a domain →
ultimate-ai.studio→ plan Free → continue. Cloudflare shows two nameservers, e.g.ada.ns.cloudflare.comandbob.ns.cloudflare.com. - IONOS → Domains & SSL →
ultimate-ai.studio→ Nameserver (or Adjust nameservers) → Use custom nameservers → enter the two Cloudflare nameservers → Save. Remove any other IONOS nameservers. - Wait until Cloudflare shows the domain as Active (minutes up to 24 h; you get an email).
- Cloudflare → Workers & Pages → your project → Custom domains → Set up a custom domain →
ultimate-ai.studio→ Activate. Repeat forwww.ultimate-ai.studio. - Cloudflare → domain → SSL/TLS → mode Full; Edge Certificates → Always Use HTTPS on.
If you use IONOS email (e.g. support@ultimate-ai.studio), copy the IONOS MX, SPF (TXT) and autodiscover records into Cloudflare → DNS before switching nameservers, so mail keeps working. IONOS lists them under Domains → DNS.
Make yourself the administrator
- Open
https://ultimate-ai.studio/studio/→ Create account with your email → confirm the email. - Supabase → SQL Editor → run (with your email):
update public.profiles set role = 'admin', plan = 'pro' where email = 'you@example.com';
- Reload
/admin/. You can now give other users Pro, make support agents, block accounts and change the daily AI limit.
Sign-in emails from your own address (recommended)
- IONOS → create the mailbox
support@ultimate-ai.studio. - Supabase → Authentication → Emails → SMTP Settings → enable custom SMTP:
Hostsmtp.ionos.de· Port587· Usersupport@ultimate-ai.studio· Password = mailbox password · Sender nameUltimate AI Studio. - Optionally translate the email templates under Emails → Templates.
Test everything
All checks done – Ultimate AI Studio is live. 🎉
Updates later
- Option A: Cloudflare → your Pages project → Create deployment → upload the new contents of
website. - Option B (GitHub): upload the changed files to the repository – Cloudflare publishes automatically within a minute.
- Keep your
assets/config.js– it holds your keys.