Deze pagina bevat alle regels die je AI-assistent nodig heeft om je project klaar te maken voor Ai to App. Je hoeft ze niet te lezen; geef je assistent gewoon het onderstaande bericht.
Lees de gids op https://aitoapp.com/nl/upload-guide. Maak mijn project volgens deze gids klaar voor Ai to App, loop de checklist punt voor punt na en maak het zipbestand.
Ai to App controleert en publiceert websites en apps die als zipbestand worden geüpload. Geüploade bestanden worden tijdens de controle niet uitgevoerd. Serverapplicaties draaien na publicatie in hun eigen afgesloten omgeving, gescheiden van andere projecten. Deze gids bevat alle regels die nodig zijn om het project bij de eerste upload zonder problemen te laten slagen.
1. Bepaal het type van het project
Ai to App herkent het type zelf aan de hand van de bestanden in de zip. Als meerdere typen overeenkomen, geldt onderstaande volgorde; het bovenste type wint.
| Volgorde | Type | Hoe het wordt herkend | Wat in de zip moet komen |
|---|---|---|---|
| 1 | Dockerfile | Dockerfile in de hoofdmap | Broncode + Dockerfile |
| 2 | Next.js (server) | next in de afhankelijkheden van package.json | Broncode |
| 2 | Next.js (statische export) | output: 'export' in next.config.* | De INHOUD van de map out na de build |
| 3 | Node.js-server | express, fastify, koa, hono, @nestjs/core, @hapi/hapi, restify, socket.io | Broncode |
| 4 | Gebouwde website | vite, react-scripts, vue, @angular/core, astro, @sveltejs/vite-plugin-svelte, parcel, webpack + build-script | De INHOUD van de map dist na de build (build voor react-scripts) |
| 5 | Node.js (algemeen) | Een start-script of een main-veld in package.json | Broncode |
| 6 | Python | requirements.txt, pyproject.toml, Pipfile of manage.py | Broncode |
| 7 | .NET | .csproj / .fsproj in de hoofdmap | Broncode |
| 8 | Statische website | Alleen index.html en HTML/CSS/JS-bestanden | De bestanden zelf |
Belangrijk:
- Bij gebouwde websites (React, Vue, Vite, Angular, Svelte, Astro) voer je eerst
npm run builduit. Zip de bestanden IN de ontstane mapdist(ofbuild). In de hoofdmap van de zip moet directindex.htmlstaan. - Go-projecten worden alleen met een
Dockerfilegepubliceerd. - docker-compose wordt niet ondersteund; alleen de hoofdapplicatie (Dockerfile) draait. Ai to App levert de database apart (zie sectie 4).
2. Zipregels
Limieten
| Regel | Limiet |
|---|---|
| Grootte van het zipbestand | maximaal 50 MB |
| Totale grootte van de uitgepakte bestanden | Tot 200 MB voor een statische site, tot 300 MB voor een serverapp (100 MB bij het gratis abonnement) |
| Grootte van één bestand | maximaal 25 MB |
| Aantal bestanden | Tot 2000 voor een statische site, tot 5000 voor een serverapp |
Mapstructuur
- De projectbestanden moeten in de hoofdmap van de zip staan of in één bovenliggende map.
- Bij een statische website moet
index.htmlin de hoofdmap van de zip staan of in de enige bovenliggende map. - Twee bestanden met hetzelfde pad en onveilige paden met
../worden niet geaccepteerd.
NIET in de zip stoppen (worden automatisch verwijderd en nemen onnodig ruimte in)
- Afhankelijkheden:
node_modules,.venv,venv,__pycache__,bower_components,.pytest_cache,.mypy_cache - Tool- en versiebeheermappen:
.git,.svn,.hg,.idea,.vscode,.vs,.cache,.turbo,.parcel-cache,.gradle - Buildresultaten:
.next,.nuxt,.svelte-kit. Bij .NET ookbinenobj. - Systeembestanden:
__MACOSX,.DS_Store,Thumbs.db,desktop.ini,*.pyc
NOOIT in de zip stoppen (worden verwijderd en niet bewaard)
.env-bestanden: zoals.env,.env.local,.env.production. Voorbeeldbestanden mogen blijven:.env.example,.env.sample,.env.template. Zit er een.envin je zip, dan wordt het bestand niet bewaard; alleen openbare waarden met de voorvoegselsVITE_,NEXT_PUBLIC_,PUBLIC_,REACT_APP_gaan mee naar de build. Geheime waarden vul je in het paneel in.- Sleutel- en referentiebestanden:
*.pem,*.key,*.p12,*.pfx,*.ppk,*.jks,*.keystore,id_rsa,id_ed25519,.npmrc,.pypirc,.netrc. Als een van deze eerder is gedeeld, vernieuw dan de sleutel.
Bestanden die de upload stoppen
- In de broncode van een applicatie: Windows-scripts en installatiebestanden (
.bat,.cmd,.ps1,.vbs,.scr,.msi). Gecompileerde programmabestanden (.exe,.dll,.soen dergelijke) worden verwijderd; de server bouwt het project vanuit de broncode. - In een statische website:
- Servercode en uitvoerbare bestanden zijn verboden:
.php,.py,.rb,.pl,.cgi,.asp,.aspx,.cshtml,.jsp,.exe,.dll,.sh,.jar,.htaccess,.config. - Toegestane typen:
.html,.htm,.css,.js,.mjs,.json,.webmanifest,.txt,.xml,.csv,.svg,.png,.jpg,.jpeg,.gif,.webp,.avif,.ico,.bmp,.woff,.woff2,.ttf,.otf,.eot,.mp4,.webm,.mp3,.ogg,.wav,.pdf. .map- en.md-bestanden worden overgeslagen.
- Servercode en uitvoerbare bestanden zijn verboden:
3. Verplichte instellingen voor serverapplicaties
Poort en adres
Ai to App geeft de poort waarop de applicatie moet luisteren door via de omgevingsvariabele PORT. De applicatie moet zich aan het adres 0.0.0.0 binden; localhost of 127.0.0.1 zijn van buitenaf niet bereikbaar.
| Taal | Juist gebruik |
|---|---|
| Node.js | app.listen(process.env.PORT || 3000, '0.0.0.0') |
| Python (FastAPI) | uvicorn main:app --host 0.0.0.0 --port $PORT |
| Python (Flask) | gunicorn app:app --bind 0.0.0.0:$PORT |
| Python (Django) | gunicorn config.wsgi --bind 0.0.0.0:$PORT |
| Go | ":" + os.Getenv("PORT") |
| .NET | Er mag GEEN regel UseUrls(...) in de code staan |
Startcommando
- Node.js:
- Het script
startinpackage.jsonmoet de productieserver starten, bijv."start": "node server.js". - Ontwikkelcommando's mogen NIET in
startstaan:vite,next dev,nodemon,ts-node-dev,tsx watch,webpack serve,react-scripts start,npm run dev. Laat deze in het scriptdevstaan. - TypeScript: voeg
"build": "tsc"toe en maak er"start": "node dist/index.js"van. TypeScript tijdens het draaien compileren is traag. - Voeg het lockbestand toe aan de zip (
package-lock.json,pnpm-lock.yaml,yarn.lockofbun.lockb). - Geef de Node-versie op via
package.json→engines.nodeof.nvmrc.
- Het script
- Python:
- FastAPI, Flask, Django, Streamlit en Gradio worden automatisch herkend.
- Gebruik je een andere structuur, maak dan in de hoofdmap een
Procfileaan:web: <startcommando>. Het commando moet0.0.0.0en$PORTgebruiken. - Flask:
gunicornmoet inrequirements.txtstaan. - Django:
ALLOWED_HOSTSmag niet leeg zijn,DEBUG = Falsemoet gelden enSECRET_KEYmoet uit een omgevingsvariabele worden gelezen. - Geef de Python-versie op via
runtime.txtof.python-version.
- .NET: in de hoofdmap moet een
.csprojstaan. Ai to App bouwt metdotnet publish -c Release; de doelversie wordt gelezen uitTargetFrameworkin de.csproj. - Dockerfile: geef de poort van de applicatie op met
EXPOSE. De applicatie moet de variabelePORTnog steeds lezen.
4. Database
Ai to App richt de database zelf in en geeft de verbindingsgegevens door via een omgevingsvariabele. Schrijf het verbindingsadres niet in de code; lees het uit onderstaande variabele.
| Database | Omgevingsvariabele | Opmerking |
|---|---|---|
| PostgreSQL | DATABASE_URL | Je krijgt een aparte database en gebruiker toegewezen |
| MySQL | DATABASE_URL | Je krijgt een aparte database toegewezen |
| MongoDB | MONGODB_URI | Je krijgt een aparte database toegewezen |
| Redis | REDIS_URL | |
| SQLite | DATABASE_PATH | Het bestand wordt in de permanente map bewaard (/data/app.db) |
| SQL Server | — | Wordt niet geleverd; geef het adres van je eigen server op als omgevingsvariabele of stap over op PostgreSQL |
| Supabase, Firebase, Neon, PlanetScale, Turso | je eigen variabelen | Voer de verbindingsgegevens in het paneel in als omgevingsvariabelen |
- Prisma: voeg de map
prisma/migrationstoe aan de zip; anders worden de tabellen mogelijk niet automatisch aangemaakt. - Alembic: als
alembic.iniaanwezig is, wordtalembic upgrade headvóór de publicatie automatisch uitgevoerd. - SQLite-bestand: het SQLite-bestand in de zip wordt alleen bij de eerste publicatie als beginwaarden gebruikt; latere uploads overschrijven de live gegevens niet. Stop geen testdatabase met persoonsgegevens in de zip.
- Updates: wanneer je een nieuwe versie uploadt, blijven de gegevens in de database behouden.
5. Permanente bestanden
De schijf van de omgeving waarin de applicatie draait is niet permanent; bij elke nieuwe publicatie wordt die gewist. De enige permanente map is /data.
- Sla door bezoekers geüploade foto's en documenten, aangemaakte bestanden en de SQLite-database op onder
/data. - Lees het pad van de map uit de omgevingsvariabele
DATA_DIR; Ai to App stelt deze voor je in op/data.
6. Geheime gegevens en omgevingsvariabelen
- Schrijf wachtwoorden, API-sleutels en tokens niet in de code; lees ze uit omgevingsvariabelen. Je voert de waarden in het Ai to App-paneel in; ze worden versleuteld opgeslagen.
- Openbare voorvoegsels: variabelen met het voorvoegsel
VITE_,NEXT_PUBLIC_,REACT_APP_enPUBLIC_worden tijdens de build in de code ingebed en zijn voor elke bezoeker zichtbaar. Zet hierin geen geheime waarden. - Inlogsysteem (NextAuth / Auth.js):
NEXTAUTH_URL(ofAUTH_URL) moet het echte adres van de site zijn enNEXTAUTH_SECRET(ofAUTH_SECRET) moet gevuld zijn. - OAuth (Google, GitHub): voeg in de instellingen van de aanbieder het publicatieadres toe als toegestaan omleidingsadres.
- Inloggen met Supabase: vul in Supabase onder Authentication > URL Configuration bij Site URL je gepubliceerde adres in en voeg het exacte adres toe aan Redirect URLs (
https://your-app.aitoapp.com/). Anders gaan de links in bevestigings- en inlogmails naarlocalhost:3000en wordt het inloggen niet afgerond. Voor inloggen met Google voeg je in Google Cloud je gepubliceerde adres toe aan Authorized JavaScript origins enhttps://PROJECT.supabase.co/auth/v1/callbackaan Authorized redirect URIs. - Variabelen die Ai to App zelf levert:
PORT,HOST=0.0.0.0,DATA_DIR=/dataen de databasevariabelen (sectie 4). Bij Node.jsNODE_ENV=production.
7. Wat niet in de code mag staan
localhost-adressen: code die verzoeken doet naarhttp://localhost:...ofhttp://127.0.0.1:...gaat na publicatie naar de eigen computer van de bezoeker en werkt niet. Lees het adres uit een omgevingsvariabele (bijv.import.meta.env.VITE_API_URL) of gebruik, als het dezelfde server is, een relatief pad (fetch('/api/...'))./api/...-verzoeken in een statische website: achter een statische website staat geen server. Als een API nodig is, maak het project dan klaar als één serverapplicatie (bijv. Express) die samen met zijn API draait.- Vaste poort:
const PORT = 3000mag niet alleen staan; gebruikprocess.env.PORT || 3000. - Debugmodus:
debug=TrueofDEBUG = Truemag in productie niet aan staan. - In de code ingebedde geheimen: een gevonden sleutel geldt als gedeeld; vernieuw hem.
8. Checklist voor de assistent
- Het projecttype is bepaald (sectie 1).
- Bij een gebouwde website is de build uitgevoerd en is alleen de inhoud van de map
dist/build/outgezipt;index.htmlstaat in de hoofdmap. - Bij een serverapplicatie start het
start-script (of de Procfile) de productieserver. - De poort wordt uit de omgevingsvariabele
PORTgelezen; de server bindt zich aan het adres0.0.0.0. - Er is geen
localhost- /127.0.0.1-adres meer in de code achtergebleven. - Wachtwoorden en sleutels zijn uit de code gehaald; ze worden uit omgevingsvariabelen gelezen.
- De databaseverbinding wordt gelezen uit
DATABASE_URL/MONGODB_URI/REDIS_URL/DATABASE_PATH. - Permanente bestanden worden onder
/datageschreven. - Het lockbestand is aanwezig (
package-lock.json, enz.). node_modules,.git,.venv,.next,bin,obj,.enven sleutelbestanden zitten NIET in de zip.- De zip is kleiner dan 50 MB en elk bestand kleiner dan 25 MB; maximaal 2000 bestanden.
9. Vertel me aan het eind het volgende
- De exacte locatie van het klaargemaakte zipbestand.
- Het type van het project en de gebruikte taal of het framework (bijv. "Node.js + Express").
- De lijst met omgevingsvariabelen die ik in het paneel moet invoeren: de naam van elk ervan en waarvoor het dient. Schrijf de waarden niet op; die voer ik zelf in.
- Een korte samenvatting van de wijzigingen die je hebt aangebracht.
Is er na het uploaden van de zip een probleem, dan legt Ai to App het in gewone taal uit; plak die tekst bij je assistent.
