Quickstart
This guide assumes you have a running instance and a superuser account — either from the docker-compose stack or a local development setup. If you don't, start with Install.
By the end you will have a working home page and know where to go next.
Expect a blank site
A fresh install has almost nothing in it. Visit the root URL and you'll get a near-empty page. This is correct, not broken.
Pengin-Pi-3 resolves page requests against the slug tree, and a new install
has no slugs in it. The route that handles / is a catch-all that looks for
a matching slug and finds none. Your first job is to create one.
1. Log in
Go to /login/ and sign in with the superuser you created during install.
Page creation and editing require an authenticated staff account — anonymous
visitors hitting an unresolved path are redirected to login rather than shown
an error.
2. Create your first page
Go to /slug/create/.
The create form asks for a small set of fields:
- Name — the URL segment. It is lowercased on save, so
Aboutandaboutproduce the same path. - Parent — leave empty for a top-level page. Set it to an existing slug to nest underneath it; the full URL is built by walking the ancestry.
- Meta tags and meta description — used for SEO output and picked up automatically by the sitemap.
- Template — which layout this page renders inside.
Save, and the page exists. No migration, no restart, no deploy. Visit the path you just named and it's there.
3. Edit the page
Saving a new slug drops you into the edit view at /slug/edit/<id>/. This is
where the actual content lives, and it's a different job from creating the
slug.
The edit form gives you:
- Render template — the page body, written in Django template language
- Upload controls — images, files, and video attached to this page
- JSON — structured data available to the template
- Metadata — the fields from the create form, editable
Content is stored and read dynamically. Edit the template, save, reload the page, and the change is live.
You will need Django template language
This is the one prerequisite Quickstart can't shortcut. Page bodies are Django templates, so the syntax for variables, tags, loops, includes, and static file references applies directly.
If you have written a Django template before, you already know how to use this. If you haven't, the Django template documentation is the right starting point, and Template Reference covers the layouts, blocks, and components this platform provides on top of it.
One common trip-up: this is Django, not Flask. Static assets use
{% load static %} and {% static 'path/to/file.svg' %}. Jinja-style
url_for(...) will raise a template syntax error.
4. Make it your home page
[Describe how a slug becomes the root page — whether that's naming it a particular way, leaving the name empty, or a setting. This is the one step I can't document without knowing the actual mechanism.]
5. Build out the tree
Repeat for the pages your site needs. Nesting works through the parent field,
so a slug named history with parent about is reachable at /about/history/.
Pages are picked up by the sitemap automatically, filtered against your
crawler rules — see SEO and Sitemaps if you need to keep something out of
sitemap.xml.
Next
- Slugs and Pages — the full slug system: creation, dynamic template resolution, the edit form, and media handling
- Template Reference — layouts, blocks, and components
- RBAC — roles, teams, and controlling who can edit what
- Info — the optional apps you can enable alongside the core
Pages Here
No sub-pages yet.
Page Info
Wiki: Docs
Created on Sep 20, 2026 by Tobu Pengin, L.L.C.
Maintainers
| Editor | Last Activity |
|---|---|
| Tobu Pengin, L.L.C. creator | Sep 20, 2026 |