Self-hosted · AI-powered website builder

Websites that build themselves.

Describe your site in plain language - purpose, audience, style, content. An autonomous agent researches the topic, designs and writes the complete page as a single self-contained index.html on Bootstrap 5. It runs entirely on your own hardware against your own LLM.

No cloud No subscriptions Data never leaves your network
ASPPY runtime (Classic ASP for Python) Python 3.9+ SQLite · app.db React single-page app Bootstrap 5.3 output LM Studio Ollama (OpenAI-compatible) Anthropic API Wikipedia research tools bcrypt sessions
01 / Features

Everything an agent should do - and nothing it shouldn't.

Autonome is a handful of files you can keep in any folder. No npm, no build step, no external tracking. Here's what that small footprint does.

Agentic AI generation

The agent doesn't just complete text. It researches your topic - optionally via Wikipedia search tools - reasons about the brief, and writes a complete, responsive website in one pass.

search_wikipedia · get_wikipedia_page → one html block

Your hardware, your model

Works with LM Studio or Ollama (OpenAI-compatible endpoints) on a local machine, or Anthropic's API. No cloud requirement - the only outbound call is to the endpoint you configure.

Plain-language editing

After the first build, keep asking for changes - “make the hero full-screen”, “add a testimonials section”, “switch to a dark theme” - and the AI patches the page in place.

Bring your own photos

Upload images and the AI weaves them into the design using exact relative paths. Anything wider than 1920 px is resized automatically.

Version history & restores

A backup is created before every generation. Preview any previous version full-screen and restore it with one click - restores are backed up too, so nothing is ever lost.

Single-file output

Clean, semantic, mobile-first HTML/CSS/JS on Bootstrap 5.3 - with a cookie notice and privacy statement included, plus Open Graph tags injected automatically for proper link previews.

Download & publish anywhere

Every project downloads as a ready-to-host autonome.zip. Drop it on any static host - no server, no dependencies.

Multi-user, isolated

Every user gets their own projects and files. Admins manage the AI configuration centrally and can promote or demote roles.

Async generation

Long builds run in a detached background worker. Leave the page or close the browser - the job continues, you can re-attach when you return, and optionally get an email when it finishes.

Self-contained & private

A single folder of files served by the ASPPY runtime. No npm, no build step, no external tracking - and a broken AI response can never overwrite your site.

02 / Pipeline

How a generation works

From prompt to page in six moves. The agent may call tools and reason along the way - but it always ends by writing exactly one fenced html block, which the server validates before anything is saved.

Cancel anytime

A running generation can be cancelled - any partial result is discarded and nothing is written. Navigate away mid-build and the app re-attaches to the still-running job when you come back.

01

You submit a prompt

Type your request in the chat - optionally after uploading photos. Enter sends; Shift+Enter inserts a newline.

02

A job is created

If the server supports it, a detached worker runs the build in the background; otherwise it runs synchronously. The UI polls for status every few seconds and shows “AI is building your website”.

03

The agent builds the full prompt

Your request, the project name, the current index.html (so it improves rather than rebuilds), your image paths, the last 5 prompts as context - and Wikipedia tools if enabled. It may call tools, reason, then write one fenced html block.

04

The server validates & cleans

The answer must be a complete HTML document. Long dashes are replaced, image paths made relative, internal block-ID markers stripped and re-numbered, a responsive safety net (viewport meta + overflow guards) and Open Graph tags injected - then the previous version is backed up to backups/<timestamp>/.

05

The new page is written

Your fresh index.html lands and the preview refreshes. Keep refining in plain language, or roll back via History.

06

Failures are contained

A broken or incomplete page triggers up to 3 retries with adaptive “repair” hints; otherwise your site is left untouched and the error explained. Truncated answers (finish_reason = length) come with a hint to raise max_tokens.

03 / User interface

A single-page app, four rooms.

All navigation happens through URL fragments (#/…). The public landing page explains Autonome; everything else lives behind a session - the dashboard, the workspace where you talk to the agent, and the admin panel.

The workspace (#/project/<id>) is a split screen: live preview on the left, the AI Builder chat on the right. Uploaded photos appear as a thumbnail strip above the preview - hover one to delete it.

http://localhost:8080/sites/a3f9c2e8b7d41056/ LIVE
AI Builder - chat
Make the hero full-screen and add opening hours below it.
🧠 thinking6.4 s2,310 tok358 t/s
Done - the hero is now full-viewport with a soft fade, and I added an opening-hours table under the menu.
Switch to a dark theme.
🧠 thinking4.1 s1,860 tok312 t/s
Rethemed - deep charcoal base with a warm amber accent. Your photos and layout are untouched.

Header actions

Reset - wipe site, history & backups (photos kept) History Open site in new tab Download autonome.zip Upload images - jpg · png · gif · webp · bmp · avif

Suggestions & notifications

“Suggest improvement” opens starter prompts on a fresh project, or grouped ideas (tone, theme, layout, colors, content structure) on an existing one. Tick “Email me when the generation is complete” for a notification email per build.

The dashboard lists every project you own, most recently updated first. Click a card to open its workspace.

Corner Bakery

a3f9c2e8b7d41056

Updated 2 h ago · 14 versions

Portfolio - J. Meier

9c2e77ab04f1d83a

Updated yesterday · 6 versions

Docs site

5b0d1f9e2c7a8463

Updated 3 d ago · 2 versions

+ New Projectown URL + starter page, instantly

Per-project actions

  • Open workspace - click the project card.
  • Rename - change the display name (the URL never changes).
  • Copy - duplicate website files, photos and prompt/chat history; backups are not copied.
  • Notes - attach a free-text note to the project.
  • Delete - remove permanently: all files, backups and history.

Stable, private URLs

Each project lives in a folder with a random 16-character name generated at creation - never derived from the project name or username. URLs stay stable and identities are never leaked into paths.

Sign in

Existing username + password. Admins are routed to the Admin panel automatically; everyone else lands on the Dashboard.

Register free

Username (plain ASCII), a valid email, and a password of at least 6 characters. New accounts are regular users - not admins.

Forgot password?

Enter your email; if it's registered (and SMTP is configured) a reset link - valid for 1 hour - is emailed to you. The response is intentionally neutral so addresses can't be probed.

First login - default admin

FieldValue
Usernameadmin
Passwordadmin123

The default account is created on first run and is widely known. Change it right away (Account → Change password).

Your account page

  • Update email - enter the new address and confirm with your current password.
  • Change password - current password + new password (min. 6 characters) + confirmation.

Only administrators see the Admin tab. Three panels: LLM configuration, email settings, and user management.

LLM configuration

SettingDescription
LLM Endpoint URLBase URL of your LM Studio / Ollama server, e.g. http://localhost:1234. OpenAI-compatible.
API KeyNeeded for LM Studio remote access (and any OpenAI/Anthropic key).
Model NameClick ↻ Models to fetch the list from the endpoint (OpenAI /v1/models; Anthropic returns a curated list). Or type one manually with the ✎ Edit toggle.
Wikipedia toolsOn/off - lets the AI research topics via search_wikipedia / get_wikipedia_page while building.
System PromptOptional extra instructions prepended to every generation.
Extra LLM ParametersOptional JSON, e.g. {"temperature": 0.7, "max_tokens": 8192}.
Internal URLThe address the app uses to reach itself for the async worker (bypasses a reverse proxy). Must match the port ASPPY listens on - e.g. http://127.0.0.1:8058 behind IIS ARR.

Email settings

  • SMTP server - host, port (25 · 465 SSL · 587 STARTTLS), login, password, SSL/TLS toggle and From address.
  • Public URL of this app - used to build links inside emails. Default http://localhost:8080.
  • Password reset email - subject + body template with placeholders {username}{link}
  • Generation finished email - subject + body template with {username}{project}{status}{link}

Emails are only sent for the password-reset flow and when a user ticks “Email me when the generation is complete”.

Users

UsernameEmailRoleCreated
adminroot@localadmin2026-09-16
jmeierj@localuser2026-09-14

Promote users to admin, or demote them back - one click per row.

04 / Quick start

From zero to first site in three steps.

The whole application is a handful of files you can keep in any folder - the www folder in this project is just one example. The database is created automatically on the first request. No setup step needed.

STEP 1Install the runtime

Python 3.9+ on Windows, Linux or macOS - then ASPPY from pip. The ASPPY source folder is not included with, or needed by, this app.

$ pip install asppy

You'll also need an LLM endpoint (local LM Studio / Ollama, or an Anthropic key) and - optionally - an SMTP account for emails.

STEP 2Serve the app folder

Point the docroot argument at whatever folder contains the app files - any name, anywhere:

# Usage: asppy [host] [port] [docroot] $ asppy 0.0.0.0 8080 www

On Windows, double-click start_www.bat - it frees port 8080, starts the server and opens your browser. In a source checkout the equivalent is python ASPPY/server.py …; after pip install, asppy alone is enough.

STEP 3Log in & configure

Open http://localhost:8080, sign in with the default admin, change that password, then set your LLM endpoint in the Admin panel.

# default administrator (change it!) > username: admin > password: admin123

Then: Dashboard → + New Project → describe your site in plain language. Other users can register their own accounts from the sign-in page.

05 / Architecture

Where files are stored

Everything lives inside the app folder you serve with ASPPY. The UI is a React single-page app; the backend is one REST JSON API backed by SQLite.

The whole stack, in one line

React SPA REST JSON → api.asp app.db + sites/

A handful of files, any folder

The app is just the files above. Keep them in www, autonome or wherever - ASPPY only needs a docroot path.

Random 16-char project IDs

Project folder names are generated at creation and never derived from the name or username - URLs stay stable and identities don't leak into paths.

A backup before every change

Before each generation - and before each restore - the current site is copied to backups/<timestamp>/. Nothing is ever lost.

The AI only writes index.html

ValidateFileExtension refuses any other filename in AI output, and every document must pass a structural completeness check before it's saved.

06 / API

The API at a glance

The SPA talks to api.asp?action=… over JSON - application/x-www-form-urlencoded with a json= field, or multipart for uploads. Sessions are cookie-based; the SPA pings keepalive every 5 minutes while logged in.

Authentication

setuploginlogoutsessionregister

Initialise/seed the database (auto-called) and manage sessions.

Account

change_passwordupdate_emailforgot_passwordreset_password

Credentials and email management, with single-use reset tokens.

Admin configuration

get_configsave_configlist_models

LLM and email settings, plus model discovery from the endpoint.

Projects

get_projectscreate_projectrename_projectcopy_projectdelete_projectreset_projectupdate_notesget_notes

Full project lifecycle - ownership is verified on every call.

Generation & jobs

generate_websitegenerate_workergenerate_statuscancel_generationactive_jobkeepalive

Submit, detach, poll, cancel and re-attach to AI build jobs.

Images

upload_imagelist_imagesdelete_image

Multipart uploads into the project's img/, auto-resized to 1920 px.

History & exports

list_backupsrestore_backuppreview_backupdownload_projectget_project_files

Backups, full-screen previews, restores and the autonome.zip export.

Chat & users

get_chat_historyadmin_get_usersadmin_update_user

Per-project prompt/reply logs, and role management for admins.

System

versionping

Health and version info.

07 / Tips for best results

Talk to the agent like a designer, not a compiler.

Don't expect perfection in one shot - iterate. Small changes patch individual blocks; big changes are full redesigns you ask for explicitly.

Be specific

Mention goal, audience, colors, style, tone and the content you want.

Photos first

Upload your photos before the first build so the agent can design around them.

Iterate

Refine in plain language across several rounds - that's what the agent is for.

Use suggestions

The pick-list surfaces useful improvement patterns you might not think of.

Name big changes

Ask for a full redesign explicitly; small tweaks are handled by patching blocks in place.

Your language

Write the prompt in your own language - the generated site comes out in that same language.

Raise max_tokens

If you see “cut off by the token limit”, bump max_tokens in the LLM parameters.

Fallbacks built in

Every generated image carries an onerror placeholder, so a broken link never ruins the page.

Try these prompts - click to copy

08 / Security

Private by construction.

Autonome makes outbound requests only to the LLM endpoint you configure and (optionally) to the public Wikipedia API. Everything else stays on your machine - here's how it's protected.

Change the default credentials immediately

The admin / admin123 account is created on first run and is widely known. Rotate it right after your first login.

Strong hashing, short-lived tokens

Passwords are stored as bcrypt hashes (ASPPY crypto). Reset tokens are single-use and expire after 1 hour.

Sessions, ownership & path checks

The API is session-authenticated; project operations verify ownership (user_id), backups and filenames are checked against path traversal, and random folder names keep usernames out of URLs.

The only outbound calls are yours to choose

Your configured LLM endpoint, and optionally the public Wikipedia API. No telemetry, no analytics, no phone-home.

A broken AI response never overwrites your site

Only index.html is ever written by the model. Any other filename is refused, and every generated document must pass a structural completeness check before it's saved.

Ready when you are

Your hardware. Your model.
Your website.

One folder of files, one command to start, and a conversation that ends in a finished site - hosted wherever you like, owned entirely by you.