DEVELOPER SANDBOX Academy of Mastery
WelcomeBuild · Explore · Create SD
SYSTEM DOCUMENTATION

Developer Sandbox

Architecture, purpose, content model, and development workflow for the custom system behind the Developer Sandbox.

01

Purpose

The Developer Sandbox is a personal development environment, technical reference system, project catalog, and experimental workspace built to organize ongoing development work within one cohesive system.

It supports complete projects, development experiments, Rosetta Stone language comparisons, reference guides, data work, and technical documentation without forcing every item into the same page structure. The system separates project identity and metadata from the content used to construct each page, allowing different types of work to share a consistent interface while retaining the presentation each project requires.

The Sandbox functions both as a portfolio and as a long-term development knowledge base. The entire system and its related project sites are deployed through GitHub Pages with no paid hosting dependencies.

02

System Architecture

The system is divided into three primary layers: the public Sandbox interface, a structured SQLite datastore, and a local TypeScript and Node.js editor used to manage that data.

SYSTEM FLOW
Developer Sandbox
│
├── Public Interface
│   ├── HTML
│   ├── CSS
│   ├── JavaScript
│   ├── Projects
│   ├── Reference Guides
│   └── Technical Documentation
│
├── SQLite Datastore
│   ├── Records
│   ├── Content Nodes
│   ├── Categories
│   ├── Tags
│   └── Technologies
│
└── Local Editor
    ├── TypeScript Client
    ├── Node.js Server
    ├── SQLite Operations
    ├── Content Preview
    └── Database / SQL Tools

The separation is intentional. Public presentation does not need the same permissions or capabilities as the authoring system. Editing, database writes, SQL operations, file access, and content management belong to the local development environment rather than the public-facing website.

03

Content Model

The primary content object is an Entry stored in the records table. An Entry represents the identity of a Sandbox item: its title, slug, description, type, status, visibility, navigation information, presentation mode, and other catalog-level information.

Page content is stored separately as Content Nodes. This allows one Entry to contain multiple structured sections without requiring a different database table for every project or page design.

Content Nodes can be organized as top-level Parent Nodes and Child Nodes. Parent Nodes define major page structures while Child Nodes provide the content inside those structures. The hierarchy is deliberately limited to two levels to keep page structure understandable and manageable.

CONTENT STRUCTURE
Entry
│
├── Parent Node
│   ├── Child Node
│   ├── Child Node
│   └── Child Node
│
├── Parent Node
│   ├── Child Node
│   └── Child Node
│
└── Parent Node
04

Flexible Page Structures

Parent Nodes can represent different visual structures such as navigation groups, display or preview areas, standard content, split layouts, responsive groups of boxes, and code or example sections. The type describes how content should be presented, while the stored content remains independent of a single hard-coded project page.

Additional node metadata can store presentation-specific information without requiring a new SQLite column every time the interface gains another optional feature. This provides a balance between a relational core schema and flexible page-level configuration.

05

Local Editor

A custom editor was built specifically for the Sandbox rather than adapting the project to an existing content-management system. The editor interface is written in TypeScript and communicates with a lightweight Node.js server.

The server opens the SQLite database with Node's SQLite support and provides the operations required by the editor. These include searching records, creating and updating Entries, creating and editing Nodes, changing node relationships, reordering content, deleting records or node trees, viewing database tables, and performing controlled SQL operations.

Multi-step database operations use SQLite transactions so related changes can succeed or fail as one operation. SQL validation uses a savepoint and rollback so a batch can be checked without committing its changes.

06

Why Build a Custom Editor?

The Sandbox contains content that does not fit neatly into a conventional blog or portfolio CMS. A reference guide, code comparison, experiment, project case study, and data visualization may share common identity fields while requiring very different internal page structures.

Building the editor around the Sandbox data model makes the authoring workflow match the system rather than forcing the system to match a third-party editor. It also provides a practical environment for working with TypeScript, Node.js, SQLite, data modeling, CRUD operations, rendering logic, and development tooling as parts of one connected project.

07

Public Website

The public Sandbox remains separate from the local authoring environment. The website presents projects, documentation, reference material, and technical work using the visual system shared across the Sandbox pages.

Database editing routes are part of the local development server, not a required public service. This keeps authoring capabilities separate from presentation while allowing the source code, database design, schema, and implementation to remain available for inspection in the repository.

08

Repository Structure

Source code is organized so the static Sandbox interface, database files, database definitions, TypeScript source, and local editor remain identifiable as separate parts of the same application.

SIMPLIFIED REPOSITORY STRUCTURE
developer-sandbox/
│
├── assets/
│   ├── styles.css
│   ├── inner.css
│   ├── media.css
│   └── script.js
│
├── data/
│   └── sandbox.db
│
├── database/
│   ├── schema.sql
│   ├── editor-migration.sql
│   └── seed.sql
│
├── local-editor/
│   ├── index.html
│   ├── style.css
│   └── editor.config.json
│
├── src/
│   ├── datastore/
│   └── local-editor/
│
├── tpl/
│   ├── header.html
│   ├── html.html
│   └── footer.html
│
├── index.html
├── package.json
└── tsconfig.json
09

TypeScript and Data Contracts

Shared TypeScript definitions describe Sandbox records, presentation modes, visibility states, status values, links, media, and content structures. Strict TypeScript compiler options are used so uncertainty in stored or optional data is handled deliberately rather than silently passed through the system.

This gives the datastore and editor a documented contract while still allowing the underlying SQLite schema to remain compact and understandable.

10

Design Decisions

SQLite was selected because the Sandbox needs relational data and persistent local storage without requiring a separate database service. The database travels with the project, can be inspected directly, and supports the relationships and transactions needed by the editor.

TypeScript is used for the editor and datastore layer because the system contains many related object shapes, optional fields, status values, node types, and data transformations. Static HTML and CSS remain appropriate for the public interface because the Sandbox should remain lightweight and easy to host.

The result is intentionally hybrid: a simple public interface backed by a more capable local development system. The Sandbox itself becomes both the place where development work is presented and an ongoing software project demonstrating how that content is organized and maintained.