@press2ai/theme-katalog-marketplace
v0.2.0
Published
Public marketplace catalog theme for otwartyterapeuta.pl. Classless DS (sage/cream warm), schema.org/microdata, AEO/GEO/SEO-first. Self-describing pages via @press2ai/schema-types.
Maintainers
Readme
@press2ai/theme-katalog-marketplace
Public marketplace catalog theme for otwartyterapeuta.pl.
Classless DS (sage/cream warm), schema.org/microdata, AEO/GEO/SEO-first. Self-describing pages via @press2ai/schema-types — admin landing fetches /__schema per page and generates an edit form dynamically.
Architecture
src/
├── ai.ts THEME_VERSION, THEME_ID
├── utils.ts esc, minifyCss (no consumer deps)
├── styles/
│ ├── tokens.ts CSS custom properties (colors, spacing, type scale)
│ ├── base.ts classless DS (selectors structuralne, zero klas)
│ └── index.ts combined CSS bundle (allCss)
├── templates/
│ ├── layout.ts page shell (header/footer/rollout, meta, JSON-LD)
│ └── index.ts barrel
├── pages/
│ └── dla-firm.ts SCHEMA + DEFAULTS + render — pilot
└── index.ts public exportsUsage (consumer)
import { layout, allCss, dlaFirm } from '@press2ai/theme-katalog-marketplace';
app.get('/dla-firm', async (c) => {
const stored = await content.getPage('dla-firm');
const data = stored?.content ?? dlaFirm.DEFAULTS;
const body = dlaFirm.render({ content: data });
return c.html(layout({
title: 'Dla firm — Otwarty Terapeuta',
cssTag: allCss,
panelOrigin: c.env.PANEL_ORIGIN,
}, body));
});Admin endpoint:
app.get('/admin/landing-pages/:slug/__schema', (c) => {
const map = { 'dla-firm': dlaFirm.SCHEMA };
return c.json(map[c.req.param('slug')]);
});Status
0.1.0-rc.1 — pilot z jedną stroną (dla-firm). Pozostałe strony (home, dla-terapeutow, zasady, terapeuci/*, profile, miasta, ...) dodawane iteracyjnie po akceptacji wzorca.
Versioning
Bump w 3 miejscach: package.json, src/ai.ts:THEME_VERSION, README badge.
