Meridian Manual
Setup Build Sections Deploy
⤓ Download manual

MeridianOS

The complete manual

Meridian is a personal website that looks and behaves like a vintage desktop operating system — folders, windows, apps and games instead of a scrolling page. Everything is generated from one data file, content.json, which you edit with a visual dashboard — no coding required. And the whole package is yours to run: the OS your visitors explore, the admin dashboard you manage it with, and step-by-step instructions for free hosting on Amazon AWS to put it live (chapter 5).

Two looks ship in the box: Platinum and Vintage (monochrome) — visitors can flip between them.

Platinum view
Platinum
Vintage view
Vintage (monochrome)
{{ resultCount }} result(s) for “{{ q }}” — the setup & troubleshooting chapters are hidden while searching. Clear
No matches. Try a simpler word, or clear the search.

1 · Setup, step by step

From download to a running site on your computer. If you can copy and paste, you can do this.
The short version
Unzip the folder → double-click the launcher for your system → your site and dashboard open by themselves. The numbered steps below are the manual route — and the fix if a launcher won’t run.
Requirements: Python 3 (free — steps 4–5 cover it) · Chrome or Edge for the dashboard’s folder features
1

Unzip & keep one folder

Download the template and unzip it. Everything — pages, images, music, games — lives in that one folder. Put it somewhere easy to find (your Desktop is fine) and give it a simple name like my-site. Never move individual files out of it. This folder is your website — copying it somewhere safe is a full backup.

index.htmlYour website — the Platinum view visitors see.
vintageos.htmlThe same site in the Vintage (monochrome) view.
admin.htmlThe private dashboard where you edit everything. Stays on your computer.
content.jsonAll of your content and settings. The pages and the dashboard both read this.
support.jsThe runtime the pages load. Leave it next to the html files.
/vendorThe app's engine and fonts, bundled locally — this is what lets the site and dashboard run with no internet. Keep it with the html files, and upload it to your host too.
start-…One-click launchers for Windows, macOS and Linux — see the next card.
/images /music /audio /gamesYour media: photos & icons, music-player tracks, audio posts, and game files.

The easy way — VS Code, or a one-click launcher

Either of these serves the folder for you — no terminal needed. VS Code is the one to reach for first: nothing else to install, and it works the same on every system.

VS Code (any system)No Python needed. Open the folder in VS Code, install the Live Server extension, right-click admin.html → Open with Live Server. It serves the folder and opens your browser (Chrome/Edge) automatically. Hit Preview OS to open the index.html and see the contents of your site. Use Chrome's split tab function to see both on screen at the same time.
OR

Or use the launcher for your system — it starts the server and opens your site and dashboard for you. These need Python installed.

start-windows.batDouble-click. First time, SmartScreen may warn — click More info → Run anyway.
start-mac.commandFirst time, right-click it → Open (a plain double-click is blocked by Gatekeeper). After that, double-click works.
start-linux.shMake it executable once — chmod +x start-linux.sh — then run it (double-click → “Run in Terminal”).

If it opens your site, you’re done — skip to chapter 02: Build your site. Leave the launcher window open while you work; it is the server. If Python isn’t installed, the launcher opens the download page for you — install it (Windows: tick “Add python.exe to PATH”), then run the launcher again. If it won’t run at all, the steps below do the same thing by hand.

2

Why you can’t just double-click it

Double-clicking index.html opens it at a file:// address, and for security browsers block a file:// page from reading other local files — so the site can’t load content.json and shows up empty. The fix is to run a tiny local web server in the folder and open the site at http://localhost instead. It sounds technical, but it’s one pasted line — and nothing you type in the next steps can break anything.

3

Pick your system

The commands differ slightly per operating system. Choose yours — every command below updates to match.

4

Check if Python is installed

Most computers already have Python — it’s what we’ll use for the server. First, open a terminal:

Press ⌘ + Space, type Terminal, press Return. Then run:

Press the ⊞ Win key, type PowerShell, press Enter. Then run:

Open your terminal (often Ctrl + Alt + T). Then run:

{{ verCmd }}

If you see something like Python 3.11.x you’re set — skip to step 6. If you see “command not found” or “not recognized”, do step 5 first.

5

Install Python

only if step 4 failed

Download the macOS installer from python.org/downloads, open it, and click through — the defaults are fine. Close and reopen Terminal, then re-run the check from step 4.

Download the Windows installer from python.org/downloads. On the installer’s first screen, tick “Add python.exe to PATH” before clicking Install — this matters. Then close and reopen PowerShell and re-run the check from step 4. (Tip: typing python on Windows may pop open the Microsoft Store — installing from python.org with “Add to PATH” avoids that.)

Python 3 is usually preinstalled. If not, install it with your package manager — e.g. sudo apt install python3 (Debian/Ubuntu) or sudo dnf install python3 (Fedora).

6

Point the terminal at your folder

Type cd and a space, then drag your site folder from Finder into the Terminal window — it fills in the location for you. Press Return.

In File Explorer, open your site folder, click the address bar, type powershell and press Enter — it opens PowerShell already pointed at the folder. (Or type cd, a space, and paste the folder’s path.)

Type cd and a space, then paste or type the folder path, and press Enter. Many file managers also have an “Open Terminal Here” right-click option.

7

Start the server

Port: any number 1024–65535 works; 8000 is the usual choice. The commands and links below update.

Paste this line and press return:

{{ serveCmd }}

If it says “Serving HTTP…”, you did it. Leave this window open while you work — it is the server. Closing it just stops the preview; nothing is lost.

8

Open your site & dashboard

Your site is now running privately on your own machine — nobody else can see it yet. In your browser (use Chrome or Edge for the dashboard’s folder-scan features), open:

{{ urlSite }}   → your website
{{ urlAdmin }}   → the dashboard

The dashboard auto-loads content.json — no password, it runs entirely on your machine. Bookmark both links.

9

Stop & start again later

To stop: click the terminal window and press Ctrl + C. Next time you want to work on your site, repeat steps 6–7 and open the same links — that’s the whole routine from now on.

▸ No Python? Two other ways to serve

Node.js — if you have Node.js installed, run this in the folder instead (first run asks to install the serve package — say yes):

{{ nodeCmd }}

VS Code — no terminal at all. Install VS Code, open your site folder in it, install the Live Server extension, then right-click index.html → Open with Live Server. It serves the folder and opens your browser automatically.

{{ g.icon }}

{{ g.title }}

{{ g.blurb }}

{{ it.name }}

{{ it.tag }}

{{ it.blurb }}

{{ it.shotImg }}
{{ it.slideText }}
{{ it.counter }}

5 · Bonus: Free hosting

Two ways to put a Meridian site online for nothing: Neocities in five minutes, or Amazon’s free tier for a custom domain.
Start here

Neocities — free, no payment card, five minutes

neocities.org is a free host built for personal sites, and it suits Meridian perfectly — it serves static files and nothing else. Sign up, delete the sample index.html it gives you, then drag your exported site folder into the dashboard. You are live at yourname.neocities.org. meridianos.neocities.org is a Meridian site running there.

Worth knowing before you pick it:
  • The free plan gives 1 GB of storage and 200 GB of bandwidth a month — far more than a personal site uses.
  • Free accounts can only upload web file types. HTML, CSS, JS, JSON, images and fonts are all fine, so the site itself works — but audio files and the DOOM bundle are not on the list. If you want the music player or DOOM, host those files elsewhere and link them, or take the $5/month Supporter plan.
  • A custom domain (yourname.com) also needs Supporter, which adds SSL and a CDN. If your own domain matters from day one, use the Amazon route below instead.
or — your own domain, on Amazon
How it fits together
Your files sit in an S3 bucket (Amazon’s file storage). CloudFront serves them to visitors over HTTPS from servers near them. Link your CloudFront to the DNS on Porkbun for anyone to access your site from your custom URL.
1

Buy a domain

You will want yourname.com instead of a cloudfront.net address. Buy a domain before you start — porkbun.com is a good registrar: cheap, no upsell maze, email forwarding, and free WHOIS privacy. Search for a name, check out (a .com is ~$11/yr; quirky endings like .site or .lol are often less). You’ll come back to Porkbun’s DNS records screen in step 6 to wire it up.

2

Create an AWS account

Go to aws.amazon.comCreate an AWS account. You’ll need an email and a payment card, but a small personal site fits comfortably in the free tier (S3: 5 GB of storage · CloudFront: 1 TB of transfer per month) — typically $0.

3

Create an S3 bucket

In the AWS console, search for S3, then click Create bucket. Give it a unique name (e.g. my-site-2026), pick global or the region closest to you, and uncheck “Block all public access” Click Create bucket.
After creating your bucket click into it and go to the Properties tab. Scroll down to the very bottom of the page and find the Static Website Hosting pane and click Edit. Switch from Disable to Enable. Under Index document type index.html in the field. Scroll to the bottom and hit Save changes.
Now, still within the bucket, go to the Permissions tab. Scroll to the Bucket policy pane and hit Edit. Copy and paste this over what is already there, replacing YOURBUCKETNAME with the bucket name you chose earlier:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::YOURBUCKETNAME/*"
    }
  ]
}

Click Save changes.

4

Upload your site

Now navigate to the Objects tab in your bucket and click Upload or just drag the files for your site (index.html, vintageos.html, support.js, content.json, and the /vendor, /images, /audio, /music and /games folders) into the pane and click Upload. Your files are now accessible from a browser. If you click into the index.html you will see an Object URL that will take you to your site. The next 2 steps add your custom domain.

5

Create a CloudFront distribution

In the search bar on the top left of the page search for CloudFront then click Create distribution. Select your plan (either Free or Pay-as-you-go at the bottom). Name your distribution then click Next. In the Origin pane, click Browse S3 and pick your bucket from the list. You will get an alert:
⚠️ "This S3 bucket has static web hosting enabled. If you plan to use this distribution as a website, we recommend using the S3 website endpoint rather than the bucket endpoint."
Click Use website endpoint. Click Next. Then Next again. Then click Create distribution.

6

Custom domain — certificate & DNS

Wait for the distribution’s status to say Deployed (~5–10 minutes). Your site is now live at the Distribution domain name — something like d1a2b3c4.cloudfront.net. Open it and you should see your site. Now in that Distributions window you should see Alternate domain names in the middle of the screen, click Add domain. Add yourname.com and www.yourname.com (replace those with the URLs you bought in step 1) and click Next. Check the box for Create a wildcard certificate and click Create certificate. It will load some credentials. Dont close that window.
In a new browser tab/window, navigate to your domain registrar dashboard (Porkbun,etc..) and navigate to the DNS settings. [ For Porkbun, go to Account in the top right, Domain Management, and you will see your domain(s) listed. Under the domain name, hit DNS.] Click Add Record. Change the type to CNAME.
Now go back to your Distributions tab and you will see the new certificate shows a CNAME Name and Value (long strings starting with an underscore). Paste the CNAME Name into the Host field on Porkbun or other DNS registrar. (Porkbun appends “.yourname.com” automatically, so paste only the “_abc123” part). Paste the entire Value string into the Target field (on Porkbun), and click Add.
Navigate back to the Distributions window and click Validate certificate. Amazon Certificate Manager will validate the DNS settings, and then hit Next. Review the changes. If your certificate does not show automatically, select it from the dropdown and hit Save changes. Your site will now be accessible from your custom URL.

7

Updates & caching

CloudFront caches your files, so after you upload new versions of content.json (plus any new images or other edited files) to your S3 bucket, you will have to create an Invalidation. Go to CloudFront, click your Distribution. Click the Invalidations tab and then Create invalidation. Enter /* to refresh everything on your site. Then click Create. It takes about a minute and your site should be updated with the changes.

6 · Troubleshooting

The things that trip people up, and the one-minute fix for each.
▸ The site opens but looks empty / shows placeholder content
You opened it as file:// (double-click) instead of http://localhost. Start the server (setup steps 6–7) and use the localhost link. Also confirm content.json and support.js sit next to the html files.
▸ “python: command not found” / “not recognized”
Python isn’t installed or isn’t on your PATH — do setup step 5. On Windows, re-run the installer and tick “Add python.exe to PATH”, then reopen PowerShell. Try python3 if python fails, and vice-versa.
▸ “Address already in use” — the port is taken
Another program (or an old server) is using that port. Change the port in setup step 7 to something else (8001, 8080, 5500…) — the command and links update — then run it again.
▸ The dashboard’s “Scan folder” button does nothing
Folder scanning uses a Chrome/Edge feature. Open admin.html in Chrome or Edge on desktop — it isn’t available in Safari or Firefox.
▸ I edited content but the live site didn’t change
Re-upload the new content.json (and any new images), then hard-refresh with Ctrl/⌘ + Shift + R. Setting content.json to no-cache on your host (chapter 4) avoids this going forward.
▸ Images load locally but not once online
Most hosting is case-sensitive. Keep folder and file names lowercase, with no spaces, and make sure the images/ folder was uploaded next to the html files.

{{ lbName }}

{{ lbTag }} {{ lbCounter }}
{{ lbImg }}
{{ lbText }}
{{ zoomImg }}
◆ MeridianOS
The complete manual · built for people setting up their own site.
Back to top ↑