Build log · Software & apps

IsaacNAS

Software & appsdone1 versionsFastAPIPythonNASCloudmacOS

reflection not written yet · every fact below is generated from this project’s own spec and files

What it is

Password-protected personal cloud — browse, upload, download files from ~/NAS/ from any device. FastAPI + LaunchAgent + SSH tunnel.

Version history

Straight from the project’s own card data — what each version added.

V1

Password auth, file browser, upload, folders, LaunchAgent auto-start, SSH tunnel, da.gd shortlink.

By the numbers

Measured from the real working folder ~/NAS/ — not a claim, a count.

1
files
0
lines of code
0
file types used
2026-08-23
oldest file
2026-08-23
last touched

Mostly: —

What broke, and what I’d change

Not written yet. This is the part only I can write — what actually went wrong, and what I’d do differently. It lives in builds/reflections/isaacnas.md (see _TEMPLATE.md); as soon as that file has words in it, this section fills in on the next build.

Everything else on this page — the spec, the version history, the file counts — is generated from the project’s own build notes and files, so nothing here is guesswork.

Build spec

The project’s own build notes, rendered. Open the raw .md ↗

Show the spec

IsaacNAS — Personal Cloud

Password-protected personal cloud file server. Drop files in ~/NAS/ and they're instantly accessible from any device.

Stack

  • Backend: FastAPI + uvicorn (Python 3.14)
  • Auth: Session-based cookie auth
  • UI: Single-page dark-themed file browser (HTML/CSS/JS inline)
  • Tunnel: localhost.run SSH reverse proxy for internet access
  • Redirect: GitHub Pages meta-refresh → da.gd shortlink
  • Daemon: macOS LaunchAgent (com.isaac.nas), auto-starts on login

Features

  • Password login
  • Directory browsing with breadcrumbs
  • File download (direct link)
  • File upload (multipart form)
  • Create folders
  • Auto-start on login via LaunchAgent
  • SSH tunnel for internet access
  • da.gd/isaacnas4 shortlink

Key code

  • server.py — FastAPI app with all routes
  • launcher.py — Starts server + tunnel + updates GitHub Pages redirect
  • run-server.sh — Shell wrapper that strips PYTHONPATH

How it works

  1. LaunchAgent starts run-server.sh on login
  2. Server binds to port 8777
  3. SSH tunnel exposes port to internet via localhost.run
  4. GitHub Pages redirect page updated with new tunnel URL
  5. da.gd/isaacnas4 → GitHub Pages → tunnel → server