Skip to content

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.

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 in definition.json.
  • project.d.ts: named results from data.json and a combined Props type.

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.

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.