architecture_en.html
This document describes how the MyAnythingList system is built internally. It explains
the startup model, parsing model, rendering model, state model, and deployment model.
It is the technical companion to the behavioral truth defined in requirements_en.html.
The system can be understood as a sequence of transformations:
free-form UTF-8 text → URL discovery → comment / command parsing → tile model construction → thumbnail and QR resolution → grid rendering → interactive control state
The user does not need to learn a rigid playlist syntax first. The architecture exists to extract useful structure from ordinary text.
The top of the main application file follows a standardized architecture.
<meta charset="UTF-8" />
<title>generic fallback title</title>
<!-- Build: ... -->
<!-- Source files: ... -->
window.MyAnythingListConfig = { ... };
const BUILD_FILE = "...";
const ProjectSourceURL = "...";
const PageTitle = "...";
const HeaderText = `...`;
const FooterText = `...`;
window.MyAnythingListConfig contains real startup/runtime values and URL-mirrored values.The runtime state model includes both startup defaults and current UI state.
GRIDQR_X, QR_Y, QR_SIZEShowQR, ShowTypes, ShowURLsShowHeaderText, ShowFooterTextShowControls, ShowGear, AutoHideGearOutput_Resolution, Download_FormatGET variables may mirror supported startup values, but branding/template content should remain outside exported state objects where appropriate.
The parsing system has multiple layers:
#.#_.The architecture is deliberately more flexible than a line-oriented parser. The parser is a text interpreter, not merely a one-line tokenizer.
The command interpreter is a second semantic layer on top of comment parsing. It must support contextual augmentation of playlist items and, where needed, standalone non-URL panels.
Commands should remain readable in plain text and must not require hidden binary metadata.
Each discovered item becomes a tile model with content, presentation, and overlay metadata.
The thumbnail resolver determines what image to show for a tile.
command-defined thumbnail → uploaded thumbnail → platform-derived thumbnail → generic fallback
QR generation is an overlay subsystem.
In image-only panel modes, the QR target may still point to the image URL unless the command semantics explicitly suppress link affordances.
The rendering layer transforms tile models into grid panels.
tile model → tile container → thumbnail or image layer → QR overlay → footer overlays → click / info affordances
The control panel and gear are not separate unrelated features. They are part of a single recoverable control-state architecture.
The playlist editor is an in-browser editing environment for the raw text source.
Output generation is a secondary pipeline layered on top of tile rendering.
The documentation tree is part of the project architecture, not an afterthought.
/_docs/
index-docs.html
/en/
index_en.html
requirements_en.html
architecture_en.html
system_en.html
developer_en.html
vision_en.html
The system is intentionally designed to support static or mostly static deployment.
authoring / mastering environment → generated files → static hosting (Apache, S3, CDN) → public consumption
Dated build archives may exist under daily build folders and are useful for transparency, testing, and human historical review.
The architecture of MyAnythingList is designed to preserve human-readable text, visual usefulness, static deployability, and future maintainability at the same time. Its strength is not just what it renders, but how understandable the whole pipeline remains.
For binding functional truth, read requirements_en.html. For philosophical
purpose, read vision_en.html.
Every tile must be built in a deterministic order: thumbnail layer first, QR layer second, type pill layer third, small URL layer fourth, and any optional top text overlays above those. URL Art belongs to the thumbnail layer and is therefore treated exactly like any other thumbnail source.
The QR layer is never allowed to migrate into the background thumbnail path during startup, export, or thumbnail download generation. The QR layer is rendered only after tile geometry is known and must remain above all thumbnail imagery.
The wall may stage the first visible tiles for immediate paint and append the remaining off-screen tiles afterward, but the visible-first frame must already have correct QR placement and correct overlay ordering. First paint correctness is mandatory and later snapping is considered a regression.
Viewport scaling is controlled by two first-class runtime properties: ViewScaleMode and SafeAreaProfile. The system must calculate a usable wall viewport by subtracting the active safe-area insets plus the header, controls, footer, and margins from the window bounds. Fit modes then scale within that usable viewport.
fitWidth: normal width-filling layout.fitHeight: first row fully visible between the top controls region and the footer.fitEverything: entire visible grid scaled to fit inside the usable viewport.digital: modern digital display profile with very small safe margins.tube: generous CRT-style safe margins for overscan-heavy displays.