AstroWay/api v2.102.11 · nl
alle systemen normaal

Een astrologie-app bouwen: complete gids voor ontwikkelaars

Stap-voor-stap gids voor het maken van een astrologie-app van scratch - keuze van API, architectuur, eerste geboortehoroscoop, toevoegen van synastrie en transits, deployen.

🕓 Bericht van 2026-04-14, bijgewerkt 2026-05-09. TS / Python / PHP SDK zijn nu beschikbaar op public registries — @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist). Details in changelog.

Wil je een astrologische applicatie maken? Waar begin je? In deze gids — oplossingen en code: van het kiezen van een API tot het deployen van een werkend product.

Voordat je code schrijft, moet je beslissen: berekeningen op de client of op de server?

Client (bijvoorbeeld, Swiss Ephemeris WASM in de browser):

  • Voordelen: geen kosten per verzoek, werkt offline, volledige controle
  • Nadelen: ~2 MB WASM per gebruiker, complexe licentie (commercieel gebruik van Swiss Ephemeris heeft beperkingen), je bent zelf verantwoordelijk voor het onderhoud van de berekeningscode

Server-API (AstroWay, Prokerala, enz.):

  • Voordelen: geen clientafhankelijkheden, kleine bundle applicatie, snel op mobiel, geen licentieproblemen
  • Nadelen: kosten per verzoek, vertraging bij ‘koude’ verzoeken

Voor de meeste applicaties wint de server-API. Mobiele gebruikers wachten niet op 2 MB WASM; met licentie-nuances hoef je niet te dealen; en moderne API’s cacheen identieke verzoeken gratis (AstroWay doet 5-minuten cache met header X-Cache: HIT).

Wat telt:

  • Nauwkeurigheid — zoek naar Swiss Ephemeris ‘onder de motorkap’ (±1 boogseconde). Als de API dit niet rechtstreeks zegt — vraag het.
  • Bereik — natte + synastrie + transits — minimum. Progressies en terugkeer — volgend niveau. Zeldzame technieken (rectificatie, Human Design) — dit is een differentiator.
  • SDK-kwaliteit — getypeerde TypeScript en Python SDK’s besparen uren.
  • Tariefmodel — credit-based schaalt beter dan per-verzoek, op gemengde belasting.

Voor deze tutorial nemen we AstroWay API, omdat het alle vier heeft (723 endpoint, Swiss Ephemeris, getypeerde SDK’s, credit-based).

Roep nooit een astrologische API rechtstreeks aan vanuit de browser — je API-sleutel lekt uit. Ga altijd via je eigen backend.

Terminal window
mkdir my-astrology-app
cd my-astrology-app
npm init -y
npm install express @astroway/sdk zod
npm install -D typescript @types/express @types/node tsx

Maak src/server.ts:

import express from 'express';
import { Astroway } from '@astroway/sdk';
import { z } from 'zod';
const app = express();
app.use(express.json());
const client = new Astroway({
apiKey: process.env.ASTROWAY_API_KEY!,
});
const BirthInput = z.object({
date: z.string(),
time: z.string(),
timezoneOffset: z.number(),
latitude: z.number(),
longitude: z.number(),
});
app.post('/api/chart', async (req, res) => {
const parsed = BirthInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
try {
const chart = await client.chart({
...parsed.data,
houseSystem: 'P',
});
res.json(chart);
} catch (err) {
res.status(500).json({ error: String(err) });
}
});
app.listen(3000, () => console.log('http://localhost:3000'));

Start:

Terminal window
ASTROWAY_API_KEY=aw_test_... npx tsx src/server.ts

Controleer via curl:

Terminal window
curl -X POST http://localhost:3000/api/chart \
-H "Content-Type: application/json" \
-d '{"date":"1990-07-14","time":"14:30:00","timezoneOffset":3,"latitude":50.4501,"longitude":30.5234}'

Ontvangt volledige JSON-geboortekaart.

Elk framework is geschikt. Voor het voorbeeld — React met een eenvoudig formulier:

import { useState } from 'react';
type Chart = {
planets: { name: string; longitude: number; sign: string; house: number }[];
aspects: { planet1: string; planet2: string; type: string; orb: number }[];
};
export function NatalForm() {
const [chart, setChart] = useState<Chart | null>(null);
async function handleSubmit(formData: FormData) {
const body = Object.fromEntries(formData.entries());
const res = await fetch('/api/chart', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
date: body.date,
time: body.time + ':00',
timezoneOffset: Number(body.tz),
latitude: Number(body.lat),
longitude: Number(body.lng),
}),
});
setChart(await res.json());
}
return (
<div>
<form action={handleSubmit}>
<input name="date" type="date" required />
<input name="time" type="time" required />
<input name="tz" type="number" placeholder="Timezone offset (bijv. 3)" required />
<input name="lat" type="number" step="0.0001" placeholder="Latitude" required />
<input name="lng" type="number" step="0.0001" placeholder="Longitude" required />
<button>Maak kaart</button>
</form>
{chart && (
<div>
<h2>Planeten</h2>
<ul>
{chart.planets.map(p => (
<li key={p.name}>{p.name}: {p.sign} (huis {p.house})</li>
))}
</ul>
<h2>Aspecten</h2>
<ul>
{chart.aspects.map((a, i) => (
<li key={i}>{a.planet1} {a.type} {a.planet2} (orb {a.orb.toFixed(2)}°)</li>
))}
</ul>
</div>
)}
</div>
);
}

Compatibiliteit — de volgende logische functie. Voeg toe in src/server.ts:

const SynastryInput = z.object({
chart1: BirthInput,
chart2: BirthInput,
});
app.post('/api/synastry', async (req, res) => {
const parsed = SynastryInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
const result = await client.synastry(parsed.data);
res.json({
score: result.compatibility.score,
label: result.compatibility.label,
aspects: result.crossAspects,
});
});

Klaar. Één endpoint, 50 credits per oproep, retourneert score 0–100 en cross-aspecten.

Voor content-engagement zijn daghoroscopen een must-have. AstroWay genereert ze met behulp van echte transitsgegevens:

app.post('/api/horoscope/daily', async (req, res) => {
const parsed = BirthInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
const horoscope = await client.horoscopeDaily(parsed.data);
res.json({
text: horoscope.text,
disclaimer: horoscope.disclaimer, // verplicht om in UI te tonen!
});
});

Belangrijk: AI-gegenereerde inhoud bevat een disclaimer die je verplicht bent om aan gebruikers te tonen (volgens de Terms of Service). Verwijder deze niet.

Daghoroscopen zijn hetzelfde voor alle gebruikers met dezelfde geboortedatum en soortgelijke geboortekaarten. Cache agressief:

import { LRUCache } from 'lru-cache';
const cache = new LRUCache<string, any>({ max: 1000, ttl: 86400 * 1000 });
app.post('/api/horoscope/daily', async (req, res) => {
const key = JSON.stringify(req.body);
const cached = cache.get(key);
if (cached) return res.json(cached);
const horoscope = await client.horoscopeDaily(req.body);
cache.set(key, horoscope);
res.json(horoscope);
});

AstroWay heeft ook ingebouwd 5-minuten servercaching (X-Cache: HIT), maar voor langdurige inhoud is eigen caching nodig.

Elk platform is geschikt. Voor een snelle start — Vercel of Railway:

Terminal window
# vercel.json
{ "functions": { "src/server.ts": { "runtime": "@vercel/node" } } }

In het paneel van de platform stel je env ASTROWAY_API_KEY in.

Als je hier bent gekomen — schat je maandelijkse creditverbruik voordat je start:

credits/maand = DAU × (avg_charts_per_user × 20
+ avg_synastries × 50
+ avg_horoscopes × 20) × 30

Voor 100 DAU met 1 kaart + 1 horoscoop + 0,3 synastrie per gebruiker per dag:

100 × (20 + 20 + 0,3 × 50) × 30 = 165 000 credits / maand

Dit is plan Starter voor $19/maand (200K credits).

Geavanceerde functies die je moet toevoegen met het groeien:

  • Transit overlay/v1/transits toont huidige planetenposities op de geboortekaart
  • Progressies/v1/progressions voor psychologische ontwikkelingsbogen
  • Zonneretour/v1/solar-return voor ‘voorspelling voor het komende jaar’
  • Human DesignHuman Design API opent een geheel nieuw functioneel domein
  • Astrocartografie/v1/acg toont waar gebruikers moeten wonen

Elke functie is moeilijk om van scratch te implementeren, maar — één API-aanroep naar AstroWay.

AstroWay team

Het engineeringteam van AstroWay API. We wikkelen Swiss Ephemeris in een schone REST-laag en schrijven over de saaie details die eigenlijk belangrijk zijn.

// bouw hierop

Dezelfde Swiss Ephemeris als in Solar Fire — in 4 regels code.

Gratis sleutel zonder kaart. 5.000 calls per maand tot de eerste betaling.

Meer uit de blog alle berichten →

Engineering 2026-06-05

Natal Chart API in TypeScript: SDK + React Example

Compute a natal chart in TypeScript with the AstroWay SDK — typed responses, a React component, and where it beats a local ephemeris library.

Ephemeris 2026-06-05

How Accurate Is the Swiss Ephemeris? Verified Benchmarks

Swiss Ephemeris accuracy in numbers — planetary positions under 0.1 arcsecond, exact house cusps, eclipses within a minute — and how AstroWay verifies it.

Ephemeris 2026-06-05

Swiss Ephemeris: REST API vs pyswisseph (When to Use Which)

pyswisseph vs a REST API for Swiss Ephemeris calculations — C dependencies, data files, licensing and deployment compared, with a decision guide.