DIN MAANEKNUDEHISTORIE — SOURCE BUILD AND DEPLOYMENT

Licence: project-owned application, prompts and native service are AGPL-3.0-only.
See LICENSE, THIRD-PARTY-NOTICES.txt and FONT-LICENSES.txt. Third-party licences
remain in force. Full native binding and Swiss core sources, original headers
and native build inputs are included in source-dependencies.tar.gz.

1. Use Node 22 and Bun with text lockfile support. Install the application with
   bun install --frozen-lockfile. Use bun run build for a production build.
   The existing Lovable Vite plugin configures TanStack Start and Cloudflare
   output. No paid AI call is made by source packaging or building.
2. Supply your own Supabase, AI, payment and email credentials as server-side
   environment values. Never put them in source control. Variable names and
   runtime validation are in src/lib/core/config.ts, src/lib/ai/gateway.server.ts,
   src/integrations/supabase/ and src/lib/email-templates/transport-config.ts.
   The optional one-off admin QA action requires EMAIL_QA_RECIPIENT, an address
   authorized by the operator. It is not a customer input or automatic send.
3. Apply the SQL files in the exact order printed by:
   node scripts/migration-order.mjs
   Use that order on your own PostgreSQL/Supabase instance. The platform and
   custom migrations use separate counters: Jupiter candidate and preview
   queue migrations must follow 0042 even though the platform names them
   0029 and 0030. Applied filenames and journal records are preserved.
   The Drizzle journal does not register all custom migrations: do not rely
   on it alone or sort filenames numerically. Read the
   deployment notes in docs/VALIDATED-CHECKOUT.txt and docs/EMAIL-DELIVERY-EVENTS.md.
   Supply your own storage buckets and cron secrets. Do not reuse production
   IDs or private data from another operator. Older status notes under docs/
   describe their original changes; README.md records the current status.
4. GeoNames sources and hashes are in src/lib/geo/manifest.ts. Download and
   unpack cities500.zip and DK.zip from the listed official dump URLs, run
   scripts/geonames/build.py in that directory, and upload the resulting
   places.tsv.gz into your own reference-data bucket. Upstream daily dumps can
   change: update the source/version/artifact hashes to match your chosen data.
5. Build services/astro/Dockerfile with services/astro as its build context.
   npm ci installs the exact native dependencies in its package-lock.json.
   To inspect/rebuild the included native source, unpack source-dependencies.tar.gz;
   sweph/binding.gyp and sweph/package.json describe compilation from the C/C++
   source. The native service needs Node 22, a persistent volume, an API key,
   licence acknowledgement and the settings in services/astro/OPERATIONS.txt.
   App and native engine must run the same source release. Keep live sales off
   until host, source offer, concurrency and delivery acceptance are complete.
6. node source-release.mjs builds a deterministic archive and a manifest of
   every included file. The shared footer links to /source/index.html. The
   Vite build hook runs this step so the archive follows changes even when a
   host bypasses package scripts. The dev server also refreshes the offer on
   source requests; a failed scan stops that request rather than serving stale code.
   Check that /source/index.html and its archive are available to actual users
   without administrator access on the deployed host. A private GitHub URL is
   not a substitute for this source offer.

The source release deliberately excludes .env files, repository history,
node_modules, local scratch scripts, generated PDFs, logs and runtime storage.
Dependencies can be retrieved at the versions/integrities in the lockfiles;
package provenance and licence notices are also listed in the notice file.
Review notices if dependencies change; regenerating the archive is not a
replacement for updating third-party attribution.

MULTI-PRODUCT STATUS (5 October 2026)
The platform has separate Moon, Kari annual-transit and Sam Jupiter adapters.
Jupiter candidate-1 is a zero-value internal test edition, never a sale edition.
It requires manual technical, astrological, language and layout review. A real
synthetic preview reached PDF and was held for review; editorial corrections
must be accepted before a customer release. The owner confirmed USD 21 for the separate commercial edition; complete
payment/delivery acceptance before enabling it.
Historical preparation notes under docs/ are not a deployment status ledger.
