Landings — your own pages inside the tracker
The whole trick of landings fits in one line: upload a ZIP — get a landing. You take a ready-made page, drop it in as an archive, and it already lives on the tracker's own domains, ready to become a stream's destination. No outside hosting, no "where do I even put this". It's all inside.
And if zipping it up is too much effort — hand the tracker a URL and it mirrors someone else's page to itself. Plus a file manager and a code editor right in the browser: open index.html, fix a heading, save — done. Grown-up tooling, just labelled in plain words.
What this screen is
A landing is a locally hosted page: you upload it as a ZIP archive (or mirror it by URL), and the tracker serves it from its own domains. From there a landing can be set as the destination of a stream inside a campaign — a person clicks the campaign link and lands on your page.
The Landings screen (/app/landings) is the list of all your pages plus two tools tucked inside each one: a file manager (what files a landing contains) and a code editor (edit those files right in the browser, with syntax highlighting).
The most important part: the files aren't on you
This is the first thing to grasp, or the rest will feel like magic. There is no local disk. Every landing physically lives on a remote storage server, and the tracker only proxies requests to it. Open a folder — the tracker fetches the listing from storage. Save a file — the tracker ships the bytes to storage. You work as if with a disk, but the disk is remote.
Which gives the golden rule: the file manager only works once storage is configured. Until storage is connected, the manager shows a "Storage not configured" banner with a link to settings — that's not a breakage, you just haven't hooked up the warehouse for your files yet.
The landings list: toolbar
Above the table sits the list controls:
- + New landing — opens the create modal (upload a ZIP or mirror a URL).
- Search — filters by landing name.
- User (team) — a user dropdown; appears only in team scope when you're an admin viewing others' landings.
- Date range — the period the stats are counted for (CR/EPC/appr%/till in the table).
- My / Team scope — the team-admin toggle: your own landings or the whole team's.
The landings list: columns
| Column | What it shows |
|---|---|
| # | uid — the landing's internal number. |
| Name | The landing's name. Clicking it opens the edit modal. |
| URL | path — the address the landing is served at. Opens in a new tab; a copy button sits beside it. |
| User | The owner (team/all scope only). For a public landing — a PUBLIC badge. |
| CR | Conversion rate, click → lead. |
| EPC | Earnings per click. |
| appr% | Approve percentage. |
| Till | Landing revenue. Till colour comes from the API (green / red / amber). |
tracker/stats?item=site for the chosen date range. So while loading, placeholders stand in their place and the numbers appear a second later. That's normal, not "frozen".The PUBLIC badge. If a landing is shared (system-owned, user_id == -1), the User column shows a PUBLIC badge instead of an owner. It's a template page available to everyone — a ready-made white/safe placeholder, for example.
Row actions
Each landing has a set of actions (some visible, some under the "···" menu):
- Open — open the landing at its
URLin a new tab. - Stats — jumps into Reports already filtered by this landing.
- Files (folder icon) — open the landing's file manager (
/landings/:id/files). - Edit — the edit modal (name, owner, re-upload ZIP/URL).
- Delete — removal with confirmation.
- ··· (menu) — Open · Copy URL · Download ZIP (the whole landing as an archive).
The "New landing" / "Edit" modal
One form for create and edit:
- Name — required. What the landing is called in the list.
- User (team) — optional. Pick an owner from team members; team scope only. This is also where you glue the landing to a sub-user.
- Archive (ZIP) — file input: upload a ZIP with the landing's contents.
- URL (mirror) — link field: give someone else's page address and the tracker clones it to its own server.
You supply either a ZIP or a URL — one of the two. On edit: re-upload an archive/URL and the landing's contents are fully replaced; leave both empty and you've just renamed it.
FormData (multipart) because it carries the uploaded ZIP. This isn't a footnote: a plain JSON request wouldn't deliver the file. Nothing for you to do — just know the upload rides the "file" channel, not the ordinary one.The file manager (/landings/:id/files)
Opened by the folder icon in a landing's row. It's an explorer over the files inside the landing on storage.
Toolbar:
- New file — create an empty file (asks for a name).
- New folder — create a directory.
- Upload — send one or more files into the current folder.
- Download ZIP — grab the whole landing (or the current folder) as an archive.
- Refresh — re-read the listing from storage.
- My / Team scope — the same toggle as in the list.
Breadcrumbs up top show which folder you're in; click a crumb to go back up.
The file grid — folders first, then files. Each file shows its size, modified date and a type icon (image / code / other).
Per-file actions:
- Folder → Open / Enter (go inside) · Download (as an archive) · Delete.
- Editable file → Open/Edit (in the code editor) · Download · Delete.
- Binary file (image, font, etc.) → Download and Delete only. No editing.
What counts as editable. You can open in the editor files with the extensions: php, htm, html, css, js, txt, xml, json, ini. Everything else is a binary: download or delete only.
The code editor (/landings/:id/edit)
Opened by clicking an editable file in the manager (or straight after "New file"). Inside is a full CodeMirror 6:
- Syntax highlighting by extension. The mode is picked automatically:
html→ htmlmixed,php→ x-httpd-php,css→ css,xml→ xml,js/json→ javascript, anything else → plain text. - Theme follows the interface. In dark theme the editor is oneDark; in light theme it's light. Flip the tracker's theme and the editor recolours on the fly.
- The "unsaved" dot. The moment you type, an unsaved-changes dot (dirty indicator) lights up on the file. Save and it goes out.
- Save — the save button. After saving — a toast "File saved".
How to upload a landing (ZIP or mirror)
- Open create. On the Landings screen click + New landing.
- Type a Name (required).
- Then one of two:
- ZIP: click Archive, pick your ZIP with the landing's files.
- Mirror: paste someone else's page address into the URL field — the tracker clones it itself.
- (Team) optionally pick a User as the owner.
- Save. The landing appears in the list with a ready URL — it's already being served there.
How to edit a landing's files
- Open files. In the landing's row click the folder icon — the file manager opens.
- Navigate via breadcrumbs / folders to the directory you need.
- Add files. Need a new file — New file; need to upload ready ones — Upload.
- Open in the editor. Click an editable file (
html,css,js,php, …) — the code editor opens. - Edit. The unsaved dot lit up — that means there's something to save.
- Save. Click Save — wait for the "File saved" toast.
php, htm, html, css, js, txt, xml, json, ini.How to replace a landing wholesale
- Open edit. In the landing's row click Edit (or click the name).
- Upload the new. In the modal upload a new ZIP into the Archive field — or give a new URL to mirror.
- Save. The landing's contents are fully replaced by the new archive/mirror; the name and owner stay if you don't touch them.
How to download a landing as an archive
- Start the download. In the landing's row open the ··· menu → Download ZIP (or from the file manager — Download ZIP).
- Wait for the file. The browser starts a file download of
site.zip.
On mobile
The file manager doesn't break on a phone, it re-stacks: file rows become two-line (name + size / actions), the modified date hides, the toolbar wraps, and navigation drops into a bottom tab bar. The code editor lives fully on desktop; on narrow screens editing is comfier from a wide screen.
Related: a landing as a stream's destination — in Campaigns; the mandatory Settings → Storage — in Settings; per-landing reports — in Reports; the domains that serve landings — in Domains; your first landing for your first campaign — in the Beginner guide.