Export your data
Your counts are yours. The console's Analytics card has one-click Export JSON / CSV buttons, and the same snapshot is available to scripts with your app's secret key — handy for a nightly off-site backup:
curl -H "Authorization: Bearer sk_live_..." \
https://api.tapback.party/v1/apps/YOUR_APP_ID/export > backup.json
# or ?format=csv for one spreadsheet-friendly file
The JSON snapshot holds your app config (no secrets), lifetime totals per page and reaction, the full per-day history, and recent usage. The CSV is the same data in long format — table,day,entity,kind,count with totals, daily, and usage rows. Counts may trail live pages by a few seconds.
Static archive — your reactions outlive us
Freezing your site, or leaving? The Archive button (or ?format=archive on the export endpoint) downloads a zip with three files: tapback-archive.json (your config + final counts per page, custom icons inlined), tapback-static.js (a self-contained read-only render bundle), and a README. Drop the two files into your generator's static directory — Hugo static/, Jekyll's site root, Eleventy's passthrough dir, Astro public/ — and swap one script tag:
<script type="module" async src="/tapback-static.js"
data-archive="/tapback-archive.json"></script>
<tapback-bar entity="your-page-id"></tapback-bar>
Your <tapback-bar> tags stay exactly as they are. The bar renders its final counts — same look, same themes — read-only, with zero network calls to Tapback: one same-origin fetch of the archive file and nothing else. It keeps working even after your app (or Tapback) is gone.
No JavaScript at all
tapback-archive.json is also a plain data file. Put it in your generator's data directory and render counts as static HTML at build time. Hugo (data/tapback.json), as a shortcode:
{{/* layouts/shortcodes/reactions.html — usage: {{< reactions >}} */}}
{{ $counts := index site.Data.tapback.counts (.Page.Params.entity | default .Page.File.BaseFileName) }}
{{ range $kind, $n := $counts }}<span class="reaction">{{ $kind }} {{ $n }}</span>{{ end }}
Eleventy (_data/tapback.json), in a Nunjucks template:
{% for kind, n in tapback.counts[page.fileSlug] %}
<span class="reaction">{{ kind }} {{ n }}</span>
{% endfor %}
The counts map is entity → reaction → total; adapt the lookup to however your entities are keyed.