Diese Seite enthält alle Regeln, die Ihr KI-Assistent braucht, um Ihr Projekt für Ai to App vorzubereiten. Sie müssen sie nicht lesen; geben Sie Ihrem Assistenten einfach die folgende Nachricht.

Lesen Sie den Leitfaden unter https://aitoapp.com/de/upload-guide. Bereiten Sie mein Projekt danach für Ai to App vor, arbeiten Sie die Checkliste Punkt für Punkt ab und erstellen Sie die ZIP-Datei.

Ai to App prüft und veröffentlicht Websites und Apps, die als ZIP-Datei hochgeladen werden. Hochgeladene Dateien werden während der Prüfung nicht ausgeführt. Serveranwendungen laufen nach der Veröffentlichung in einem eigenen, abgeschotteten Bereich, getrennt von anderen Projekten. Dieser Leitfaden enthält alle Regeln, die nötig sind, damit Ihr Projekt den ersten Upload ohne Probleme übersteht.

1. Projekttyp bestimmen

Ai to App erkennt den Typ selbst anhand der Dateien in der Zip-Datei. Passen mehrere Typen, gilt die folgende Reihenfolge; der weiter oben stehende Typ gewinnt.

ReihenfolgeTypWoran er erkannt wirdWas in die Zip-Datei gehört
1DockerfileEin Dockerfile im StammverzeichnisQuellcode + Dockerfile
2Next.js (Server)next in den Abhängigkeiten der package.jsonQuellcode
2Next.js (statischer Export)output: 'export' in next.config.*Das INNERE des Ordners out nach dem Build
3Node.js-Serverexpress, fastify, koa, hono, @nestjs/core, @hapi/hapi, restify, socket.ioQuellcode
4Gebaute Websitevite, react-scripts, vue, @angular/core, astro, @sveltejs/vite-plugin-svelte, parcel, webpack + ein build-SkriptDas INNERE des Ordners dist nach dem Build (bei react-scripts: build)
5Node.js (allgemein)Ein start-Skript oder ein main-Feld in der package.jsonQuellcode
6Pythonrequirements.txt, pyproject.toml, Pipfile oder manage.pyQuellcode
7.NETEine .csproj / .fsproj im StammverzeichnisQuellcode
8Statische WebsiteNur index.html und HTML/CSS/JS-DateienDie Dateien selbst

Wichtig:

  • Bei gebauten Websites (React, Vue, Vite, Angular, Svelte, Astro) zuerst npm run build ausführen. Packen Sie die Dateien IM INNERN des entstandenen Ordners dist (bzw. build) in die Zip-Datei. Im Stammverzeichnis der Zip-Datei muss direkt index.html liegen.
  • Go-Projekte werden nur mit einem Dockerfile veröffentlicht.
  • docker-compose wird nicht unterstützt; nur die Hauptanwendung (Dockerfile) läuft. Die Datenbank stellt Ai to App separat bereit (siehe Abschnitt 4).

2. ZIP-Regeln

Grenzen

RegelGrenze
Größe der Zip-Dateihöchstens 50 MB
Gesamtgröße der aus der Zip-Datei entpackten DateienBis zu 200 MB bei statischen Websites, bis zu 300 MB bei Server-Apps (100 MB im kostenlosen Plan)
Größe einer einzelnen Dateihöchstens 25 MB
Anzahl der DateienBis zu 2000 bei statischen Websites, bis zu 5000 bei Server-Apps

Ordnerstruktur

  • Die Projektdateien müssen im Stammverzeichnis der Zip-Datei oder in genau einem übergeordneten Ordner liegen.
  • Bei einer statischen Website muss index.html im Stammverzeichnis der ZIP-Datei oder im einzigen übergeordneten Ordner liegen.
  • Zwei Dateien mit demselben Pfad sowie unsichere Pfade mit ../ werden nicht akzeptiert.

NICHT in die Zip-Datei packen (wird automatisch entfernt, belegt nur unnötig Platz)

  • Abhängigkeiten: node_modules, .venv, venv, __pycache__, bower_components, .pytest_cache, .mypy_cache
  • Werkzeug- und Versionskontrollordner: .git, .svn, .hg, .idea, .vscode, .vs, .cache, .turbo, .parcel-cache, .gradle
  • Build-Ausgabe: .next, .nuxt, .svelte-kit. Bei .NET zusätzlich bin und obj.
  • Systemdateien: __MACOSX, .DS_Store, Thumbs.db, desktop.ini, *.pyc

NIEMALS in die Zip-Datei packen (wird entfernt und nicht gespeichert)

  • .env-Dateien: wie .env, .env.local, .env.production. Beispieldateien dürfen bleiben: .env.example, .env.sample, .env.template. Liegt eine .env in der ZIP, wird die Datei nicht gespeichert; nur öffentliche Werte mit den Präfixen VITE_, NEXT_PUBLIC_, PUBLIC_, REACT_APP_ gehen in den Build. Geheime Werte tragen Sie im Panel ein.
  • Schlüssel- und Zugangsdatendateien: *.pem, *.key, *.p12, *.pfx, *.ppk, *.jks, *.keystore, id_rsa, id_ed25519, .npmrc, .pypirc, .netrc. Wurde eine davon bereits früher weitergegeben, erneuern Sie den Schlüssel.

Dateien, die den Upload stoppen

  • Im Anwendungsquellcode: Windows-Skript- und Installationsdateien (.bat, .cmd, .ps1, .vbs, .scr, .msi). Kompilierte Programmdateien (.exe, .dll, .so und Ähnliches) werden entfernt; der Server baut das Projekt aus dem Quellcode.
  • Bei einer statischen Website:
    • Servercode und ausführbare Dateien sind verboten: .php, .py, .rb, .pl, .cgi, .asp, .aspx, .cshtml, .jsp, .exe, .dll, .sh, .jar, .htaccess, .config.
    • Erlaubte 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- und .md-Dateien werden übersprungen.

3. Pflichteinstellungen für Serveranwendungen

Port und Adresse

Ai to App übergibt den Port, auf dem die Anwendung lauschen soll, über die Umgebungsvariable PORT. Die Anwendung muss sich an die Adresse 0.0.0.0 binden; localhost oder 127.0.0.1 sind von außen nicht erreichbar.

SpracheRichtige Verwendung
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")
.NETIm Code darf KEINE Zeile UseUrls(...) stehen

Startbefehl

  • Node.js:
    • Das start-Skript in der package.json muss den Produktionsserver starten, z. B. "start": "node server.js".
    • Entwicklungsbefehle dürfen NICHT in start stehen: vite, next dev, nodemon, ts-node-dev, tsx watch, webpack serve, react-scripts start, npm run dev. Diese bleiben im dev-Skript.
    • TypeScript: Fügen Sie "build": "tsc" hinzu und setzen Sie "start": "node dist/index.js". TypeScript zur Laufzeit zu kompilieren ist langsam.
    • Legen Sie die Lock-Datei (package-lock.json, pnpm-lock.yaml, yarn.lock oder bun.lockb) in die Zip-Datei.
    • Geben Sie die Node-Version über package.json → engines.node oder .nvmrc an.
  • Python:
    • FastAPI, Flask, Django, Streamlit und Gradio werden automatisch erkannt.
    • Verwenden Sie eine andere Struktur, legen Sie im Stammverzeichnis eine Procfile an: web: <Startbefehl>. Der Befehl muss 0.0.0.0 und $PORT verwenden.
    • Flask: gunicorn muss in der requirements.txt stehen.
    • Django: ALLOWED_HOSTS darf nicht leer sein, DEBUG = False muss gesetzt sein und SECRET_KEY muss aus einer Umgebungsvariable gelesen werden.
    • Geben Sie die Python-Version über runtime.txt oder .python-version an.
  • .NET: Im Stammverzeichnis muss eine .csproj liegen. Ai to App baut mit dotnet publish -c Release; die Zielversion wird aus TargetFramework in der .csproj gelesen.
  • Dockerfile: Geben Sie den Port der Anwendung mit EXPOSE an. Die Anwendung muss trotzdem die Variable PORT lesen.

4. Datenbank

Ai to App richtet die Datenbank selbst ein und übergibt die Verbindungsdaten über eine Umgebungsvariable. Schreiben Sie die Verbindungsadresse nicht in den Code; lesen Sie sie aus der folgenden Variable.

DatenbankUmgebungsvariableHinweis
PostgreSQLDATABASE_URLIhnen werden eine eigene Datenbank und ein eigener Benutzer zugewiesen
MySQLDATABASE_URLIhnen wird eine eigene Datenbank zugewiesen
MongoDBMONGODB_URIIhnen wird eine eigene Datenbank zugewiesen
RedisREDIS_URL
SQLiteDATABASE_PATHDie Datei wird im dauerhaften Ordner gehalten (/data/app.db)
SQL Server—Wird nicht bereitgestellt; tragen Sie die Adresse Ihres eigenen Servers als Umgebungsvariable ein oder wechseln Sie zu PostgreSQL
Supabase, Firebase, Neon, PlanetScale, TursoIhre eigenen VariablenTragen Sie die Verbindungsdaten im Panel als Umgebungsvariablen ein
  • Prisma: Legen Sie den Ordner prisma/migrations in die Zip-Datei; andernfalls werden die Tabellen möglicherweise nicht automatisch erstellt.
  • Alembic: Ist eine alembic.ini vorhanden, wird vor der Veröffentlichung automatisch alembic upgrade head ausgeführt.
  • SQLite-Datei: Die SQLite-Datei in der Zip-Datei wird nur bei der ersten Veröffentlichung als Startdaten verwendet; spätere Uploads überschreiben die Live-Daten nicht. Legen Sie keine Testdatenbank mit personenbezogenen Daten in die Zip-Datei.
  • Aktualisierungen: Wenn Sie eine neue Version hochladen, bleiben die Daten in der Datenbank erhalten.

5. Dauerhafte Dateien

Der Datenträger des Bereichs, in dem die Anwendung läuft, ist nicht dauerhaft; er wird bei jeder neuen Veröffentlichung gelöscht. Der einzige dauerhafte Ordner ist /data.

  • Speichern Sie von Besuchern hochgeladene Fotos und Dokumente, erzeugte Dateien und die SQLite-Datenbank unter /data.
  • Lesen Sie den Ordnerpfad aus der Umgebungsvariable DATA_DIR; Ai to App setzt sie für Sie auf /data.

6. Geheimnisse und Umgebungsvariablen

  • Schreiben Sie Passwörter, API-Schlüssel und Tokens nicht in den Code; lesen Sie sie aus Umgebungsvariablen. Die Werte tragen Sie im Ai to App-Panel ein; sie werden verschlüsselt gespeichert.
  • Öffentliche Präfixe: Variablen mit den Präfixen VITE_, NEXT_PUBLIC_, REACT_APP_ und PUBLIC_ werden beim Build in den Code eingebettet und sind für jeden Besucher sichtbar. Legen Sie dort keine geheimen Werte ab.
  • Anmeldesystem (NextAuth / Auth.js): NEXTAUTH_URL (oder AUTH_URL) muss die echte Adresse der Website sein und NEXTAUTH_SECRET (oder AUTH_SECRET) muss gefüllt sein.
  • OAuth (Google, GitHub): Tragen Sie in den Einstellungen des Anbieters die Adresse der veröffentlichten Website als autorisierte Weiterleitungs-URI ein.
  • Anmeldung mit Supabase: Tragen Sie in Supabase unter Authentication > URL Configuration bei Site URL Ihre veröffentlichte Adresse ein und fügen Sie bei Redirect URLs die genaue Adresse hinzu (https://your-app.aitoapp.com/). Sonst führen die Links in Bestätigungs- und Anmelde-E-Mails zu localhost:3000 und die Anmeldung wird nicht abgeschlossen. Für die Google-Anmeldung tragen Sie in Google Cloud Ihre veröffentlichte Adresse bei Authorized JavaScript origins und https://PROJECT.supabase.co/auth/v1/callback bei Authorized redirect URIs ein.
  • Variablen, die Ai to App selbst bereitstellt: PORT, HOST=0.0.0.0, DATA_DIR=/data und die Datenbankvariablen (Abschnitt 4). Bei Node.js NODE_ENV=production.

7. Was nicht im Code stehen darf

  • localhost-Adressen: Code, der Anfragen an http://localhost:... oder http://127.0.0.1:... sendet, geht nach der Veröffentlichung an den eigenen Rechner des Besuchers und funktioniert nicht. Lesen Sie die Adresse aus einer Umgebungsvariable (z. B. import.meta.env.VITE_API_URL) oder verwenden Sie, wenn sie auf demselben Server liegt, einen relativen Pfad (fetch('/api/...')).
  • /api/...-Anfragen in einer statischen Website: Hinter einer statischen Website steht kein Server. Wird eine API benötigt, bereiten Sie das Projekt als eine einzige Serveranwendung (z. B. Express) vor, die zusammen mit ihrer API läuft.
  • Fester Port: const PORT = 3000 darf nicht allein stehen; verwenden Sie process.env.PORT || 3000.
  • Debug-Modus: debug=True oder DEBUG = True darf in der Produktion nicht aktiv sein.
  • In den Code eingebettete Geheimnisse: Ein dort gefundener Schlüssel gilt als weitergegeben; erneuern Sie ihn.

8. Checkliste für den Assistenten

  • Der Projekttyp wurde bestimmt (Abschnitt 1).
  • Bei einer gebauten Website wurde der Build ausgeführt und nur das Innere des Ordners dist / build / out gezippt; index.html liegt im Stammverzeichnis.
  • Bei einer Serveranwendung startet das start-Skript (oder die Procfile) den Produktionsserver.
  • Der Port wird aus der Umgebungsvariable PORT gelesen; der Server bindet sich an 0.0.0.0.
  • Im Code ist keine localhost- / 127.0.0.1-Adresse mehr übrig.
  • Passwörter und Schlüssel wurden aus dem Code entfernt; sie werden aus Umgebungsvariablen gelesen.
  • Die Datenbankverbindung wird aus DATABASE_URL / MONGODB_URI / REDIS_URL / DATABASE_PATH gelesen.
  • Dauerhafte Dateien werden unter /data geschrieben.
  • Eine Lock-Datei ist vorhanden (package-lock.json usw.).
  • node_modules, .git, .venv, .next, bin, obj, .env und Schlüsseldateien sind NICHT in der Zip-Datei.
  • Die Zip-Datei ist kleiner als 50 MB und jede einzelne Datei kleiner als 25 MB; höchstens 2000 Dateien.

9. Teilen Sie mir am Ende Folgendes mit

  1. Den genauen Speicherort der erstellten Zip-Datei.
  2. Den Typ des Projekts und die verwendete Sprache bzw. das verwendete Framework (z. B. "Node.js + Express").
  3. Die Liste der Umgebungsvariablen, die ich im Panel eintragen muss: der Name jeder Variable und wofür sie dient. Schreiben Sie die Werte nicht auf; die trage ich selbst ein.
  4. Eine kurze Zusammenfassung der von Ihnen vorgenommenen Änderungen.

Gibt es nach dem Hochladen der ZIP-Datei ein Problem, erklärt Ai to App es in einfachen Worten; fügen Sie den Text bei Ihrem Assistenten ein.