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.

VolgordeTypeHoe het wordt herkendWat in de zip moet komen
1DockerfileDockerfile in de hoofdmapBroncode + Dockerfile
2Next.js (server)next in de afhankelijkheden van package.jsonBroncode
2Next.js (statische export)output: 'export' in next.config.*De INHOUD van de map out na de build
3Node.js-serverexpress, fastify, koa, hono, @nestjs/core, @hapi/hapi, restify, socket.ioBroncode
4Gebouwde websitevite, react-scripts, vue, @angular/core, astro, @sveltejs/vite-plugin-svelte, parcel, webpack + build-scriptDe INHOUD van de map dist na de build (build voor react-scripts)
5Node.js (algemeen)Een start-script of een main-veld in package.jsonBroncode
6Pythonrequirements.txt, pyproject.toml, Pipfile of manage.pyBroncode
7.NET.csproj / .fsproj in de hoofdmapBroncode
8Statische websiteAlleen index.html en HTML/CSS/JS-bestandenDe bestanden zelf

Belangrijk:

  • Bij gebouwde websites (React, Vue, Vite, Angular, Svelte, Astro) voer je eerst npm run build uit. Zip de bestanden IN de ontstane map dist (of build). In de hoofdmap van de zip moet direct index.html staan.
  • Go-projecten worden alleen met een Dockerfile gepubliceerd.
  • docker-compose wordt niet ondersteund; alleen de hoofdapplicatie (Dockerfile) draait. Ai to App levert de database apart (zie sectie 4).

2. Zipregels

Limieten

RegelLimiet
Grootte van het zipbestandmaximaal 50 MB
Totale grootte van de uitgepakte bestandenTot 200 MB voor een statische site, tot 300 MB voor een serverapp (100 MB bij het gratis abonnement)
Grootte van één bestandmaximaal 25 MB
Aantal bestandenTot 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.html in 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 ook bin en obj.
  • 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 .env in je zip, dan wordt het bestand niet bewaard; alleen openbare waarden met de voorvoegsels VITE_, 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, .so en 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.

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.

TaalJuist gebruik
Node.jsapp.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")
.NETEr mag GEEN regel UseUrls(...) in de code staan

Startcommando

  • Node.js:
    • Het script start in package.json moet de productieserver starten, bijv. "start": "node server.js".
    • Ontwikkelcommando's mogen NIET in start staan: vite, next dev, nodemon, ts-node-dev, tsx watch, webpack serve, react-scripts start, npm run dev. Laat deze in het script dev staan.
    • 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.lock of bun.lockb).
    • Geef de Node-versie op via package.json → engines.node of .nvmrc.
  • Python:
    • FastAPI, Flask, Django, Streamlit en Gradio worden automatisch herkend.
    • Gebruik je een andere structuur, maak dan in de hoofdmap een Procfile aan: web: <startcommando>. Het commando moet 0.0.0.0 en $PORT gebruiken.
    • Flask: gunicorn moet in requirements.txt staan.
    • Django: ALLOWED_HOSTS mag niet leeg zijn, DEBUG = False moet gelden en SECRET_KEY moet uit een omgevingsvariabele worden gelezen.
    • Geef de Python-versie op via runtime.txt of .python-version.
  • .NET: in de hoofdmap moet een .csproj staan. Ai to App bouwt met dotnet publish -c Release; de doelversie wordt gelezen uit TargetFramework in de .csproj.
  • Dockerfile: geef de poort van de applicatie op met EXPOSE. De applicatie moet de variabele PORT nog 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.

DatabaseOmgevingsvariabeleOpmerking
PostgreSQLDATABASE_URLJe krijgt een aparte database en gebruiker toegewezen
MySQLDATABASE_URLJe krijgt een aparte database toegewezen
MongoDBMONGODB_URIJe krijgt een aparte database toegewezen
RedisREDIS_URL
SQLiteDATABASE_PATHHet 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, Tursoje eigen variabelenVoer de verbindingsgegevens in het paneel in als omgevingsvariabelen
  • Prisma: voeg de map prisma/migrations toe aan de zip; anders worden de tabellen mogelijk niet automatisch aangemaakt.
  • Alembic: als alembic.ini aanwezig is, wordt alembic upgrade head vóó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_ en PUBLIC_ 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 (of AUTH_URL) moet het echte adres van de site zijn en NEXTAUTH_SECRET (of AUTH_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 naar localhost:3000 en wordt het inloggen niet afgerond. Voor inloggen met Google voeg je in Google Cloud je gepubliceerde adres toe aan Authorized JavaScript origins en https://PROJECT.supabase.co/auth/v1/callback aan Authorized redirect URIs.
  • Variabelen die Ai to App zelf levert: PORT, HOST=0.0.0.0, DATA_DIR=/data en de databasevariabelen (sectie 4). Bij Node.js NODE_ENV=production.

7. Wat niet in de code mag staan

  • localhost-adressen: code die verzoeken doet naar http://localhost:... of http://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 = 3000 mag niet alleen staan; gebruik process.env.PORT || 3000.
  • Debugmodus: debug=True of DEBUG = True mag 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 / out gezipt; index.html staat in de hoofdmap.
  • Bij een serverapplicatie start het start-script (of de Procfile) de productieserver.
  • De poort wordt uit de omgevingsvariabele PORT gelezen; de server bindt zich aan het adres 0.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 /data geschreven.
  • Het lockbestand is aanwezig (package-lock.json, enz.).
  • node_modules, .git, .venv, .next, bin, obj, .env en 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

  1. De exacte locatie van het klaargemaakte zipbestand.
  2. Het type van het project en de gebruikte taal of het framework (bijv. "Node.js + Express").
  3. 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.
  4. 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.