Source, fixtures and generated files
The JSON contracts are only part of a standalone project. These files make it runnable locally and connect its content to the page.
Files you author
Section titled “Files you author”| File or folder | What belongs here | Editing rule |
|---|---|---|
src/components/HomePage.astro |
Home-page markup and styles | Render declared content/data; keep owner-editable text in fields. |
Header/footer paths from shoplifter.json |
Shared navigation and footer markup | Use the same props contract as the homepage. |
src/leads.ts and registered form components |
Lead definitions and their interface | See lead forms; this is different from the owner’s content editor. |
assets/ |
Declared bundled images, decorative artwork and fonts | Declare image bindings in assets.json; follow SDK image policy. |
package.json |
Scripts, Node engine and vendored runtime dependencies | Keep the standalone project’s generated package structure. |
package-lock.json |
Exact dependency resolution | Commit it; update runtime archives through dependency sync. |
astro.config.mjs |
The managed SDK integration | Keep its supported generated configuration; arbitrary routes/adapters are unsupported. |
vendor/ |
Pinned SDK/contract tarballs | Treat these as dependency artifacts, not source to patch. |
fixtures.json: local content, not live content
Section titled “fixtures.json: local content, not live content”shoplifter fixtures generate creates local content, asset records, editorial samples and a language code from your contracts. The top-level keys are content, assets, languageCode and editorial. For example, change content.hero.title to try a longer heading, or languageCode between en and he to inspect direction and language.
These edits affect local rendering only. They do not save dashboard content or change a published store. Generation preserves valid fixture edits and fills new fields. shoplifter fixtures reset deliberately replaces those edits, so use it only when you want a fresh sample.
src/generated/: read the types, edit the source
Section titled “src/generated/: read the types, edit the source”shoplifter types generates:
content.d.ts: the shape of the fields indefinition.json.project.d.ts: named results fromdata.jsonand a combinedPropstype.
Do not hand-edit these declarations: the next generation replaces them. Change the definition or data request, run types, and then update component code to match.
---import type { Props } from '../generated/project';const { content, data } = Astro.props as Props;---<h1>{content.hero.title}</h1>{content.showServices && ( <ul> {(content.services ?? []).map(service => <li>{service.title}</li>)} </ul>)}<ul> {data.recentArticles.map(article => <li>{article.title}</li>)}</ul>This uses the connected Studio example’s generated props. The first list is owner-authored content; the second comes from the platform article request.
Build output
Section titled “Build output”dist/ and .astro/ are generated artifacts. Inspect dist/ when checking rendered output, but fix the source rather than editing built HTML. Use shoplifter files to see the actual upload set instead of uploading every local file.

