Public, open-access journal site for Synthica Journal — peer-reviewed research by high-school and early-career scientists. This repo is the publication face; submission and peer review happen in the Synthica dashboard (create an account → My Journal → submit; every article here went through the 5-stage editorial pipeline there).
Zero-dependency static site generator (build.js, Node ≥ 18):
node build.js # build from data/fallback.json → dist/
API_BASE=http://localhost:4000 node build.js # build from a live dashboard backend
python3 -m http.server 8090 -d dist # preview- Content comes from the dashboard backend's public API (
/api/journal/meta,/api/journal/issues,/api/journal/publications), withdata/fallback.jsonas the offline fallback (same shape). Deploys re-run the build (see.github/workflows/pages.yml). - Pages are modules:
pages/<name>.page.jsdefault-exportsasync (ctx) => [{ path, html }].build.jsauto-discovers them — add pages by adding modules, never by editing the core.ctx={ config, data, layout, esc, slugify };layout(title, body, { active, head, depth })wraps content with the shared masthead/footer (partials/), wheredepthis the page's directory depth (drives relative links). - Design:
styles/design-system.css(shared Synthica tokens) +styles/journal.css(journal look, ported from the dashboard's journal pages) +styles/base.css(shell).reference/holds the original dashboard journal pages the design is ported from.
- DOI: every article page displays its DOI as
https://doi.org/…(prefix10.55555), with full bibliographic metadata, license (CC BY 4.0), references, and Google Scholarcitation_*meta tags. Crossref deposit XML is generated by the dashboard backend (Director desk → issue → “Crossref XML”). - ISSN: displayed in the masthead and footer once assigned — set
issninconfig.json(shows “ISSN pending” until then). Publisher, frequency (Quarterly), and volume/issue numbering are maintained for the ISSN application.
config.json — journal title, ISSN, publisher, frequency, DOI prefix,
dashboardUrl (submission funnel: …/register?from=journal), apiBase, contact.