🕓 Δημοσίευση από 2026-04-14, ενημερώθηκε 2026-05-09. Τα TS / Python / PHP SDK βρίσκονται τώρα σε δημόσια μητρώα —
@astroway/sdk(npm),astroway(PyPI),astroway/sdk(Packagist). Περισσότερες λεπτομέρειες στο changelog.
Θέλεις να φτιάξεις μια αστρολογική εφαρμογή; Από πού να ξεκινήσεις; Σε αυτόν τον οδηγό θα βρεις λύσεις και κώδικα: από την επιλογή API μέχρι την ανάπτυξη ενός λειτουργικού προϊόντος.
Ερωτήματα αρχιτεκτονικής
Ενότητα με τίτλο «Ερωτήματα αρχιτεκτονικής»Πριν γράψεις κώδικα, αποφάσισε: υπολογισμοί στον πελάτη (client) ή στον διακομιστή (server);
Πελάτης (π.χ. Swiss Ephemeris WASM στο πρόγραμμα περιήγησης):
- Πλεονεκτήματα: χωρίς κόστος ανά ερώτηση, λειτουργεί offline, πλήρης έλεγχος
- Μειονεκτήματα: ~2 MB WASM ανά χρήστη, περίπλοκη αδειοδότηση (εμπορική χρήση Swiss Ephemeris έχει περιορισμούς), εσύ αναλαμβάνεις τη συντήρηση του κώδικα υπολογισμών
Διακομιστής API (AstroWay, Prokerala κ.ά.):
- Πλεονεκτήματα: χωρίς εξαρτήσεις στον πελάτη, μικρό bundle της εφαρμογής, γρήγορο σε κινητά, χωρίς προβλήματα αδειοδότησης
- Μειονεκτήματα: κόστος ανά ερώτηση (σε credits), καθυστέρηση σε «κρύες» ερωτήσεις
Στις περισσότερες περιπτώσεις, το API διακομιστή είναι η καλύτερη επιλογή. Οι χρήστες κινητών δε θα περιμένουν 2 MB WASM· δε χρειάζεται να ασχοληθείς με τις περιπλοκές των αδειών· και οι σύγχρονοι API κάνουν δωρεάν caching ταυτόσημων ερωτήσεων (το AstroWay χρησιμοποιεί caching 5 λεπτών με κεφαλίδα X-Cache: HIT).
Επιλογή API
Ενότητα με τίτλο «Επιλογή API»Τι έχει σημασία:
- Ακρίβεια — ψάξε για Swiss Ephemeris «κάτω από την κουκούλα» (±1 γωνιακή δευτερόλεπτα). Αν το API δεν το αναφέρει ξεκάθαρα, ρώτησε.
- Κάλυψη — γενέθλια + synastry + transits είναι το ελάχιστο. Προόδους και επανόδου είναι το επόμενο επίπεδο. Σπάνιες τεχνικές (π.χ. rectification, Human Design) αποτελούν διαφοροποιητή.
- Ποιότητα SDK — τυποποιημένα TypeScript και Python SDK σου εξοικονομούν ώρες.
- Μοντέλο τιμολόγησης — η χρέωση βάσει credits κλιμακώνεται καλύτερα από την ανά ερώτηση, σε μικτά φορτία.
Για αυτό το tutorial, χρησιμοποιούμε το AstroWay API, καθώς περιλαμβάνει όλα τα τέσσερα (723 endpoints, Swiss Ephemeris, τυποποιημένα SDK, χρέωση βάσει credits).
Βήμα 1: Δημιούργησε το backend
Ενότητα με τίτλο «Βήμα 1: Δημιούργησε το backend»Ποτέ μην καλείς απευθείας ένα αστρολογικό API από τον browser — το API key σου μπορεί να διαρρεύσει. Πάντα χρησιμοποίησε το δικό σου backend.
mkdir my-astrology-appcd my-astrology-appnpm init -ynpm install express @astroway/sdk zodnpm install -D typescript @types/express @types/node tsxΔημιούργησε το 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'));Ξεκίνησε:
ASTROWAY_API_KEY=aw_test_... npx tsx src/server.tsΈλεγχος μέσω curl:
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}'Λάμβάνεις ένα πλήρες JSON γενέθλιας χάρτη.
Βήμα 2: Frontend
Ενότητα με τίτλο «Βήμα 2: Frontend»Μπορείς να χρησιμοποιήσεις οποιοδήποτε framework. Για παράδειγμα, React με μια απλή φόρμα:
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 (π.χ. 3)" required /> <input name="lat" type="number" step="0.0001" placeholder="Γεωγραφικό πλάτος" required /> <input name="lng" type="number" step="0.0001" placeholder="Γεωγραφικό μήκος" required /> <button>Δημιουργία χάρτη</button> </form>
{chart && ( <div> <h2>Πλανήτες</h2> <ul> {chart.planets.map(p => ( <li key={p.name}>{p.name}: {p.sign} (οίκος {p.house})</li> ))} </ul> <h2>Συμβάσεις</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> );}Βήμα 3: Synastry
Ενότητα με τίτλο «Βήμα 3: Synastry»Η συμβατότητα είναι η επόμενη προφανής λειτουργία. Πρόσθεσε στο 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, });});Έτοιμο. Μία endpoint, 50 credits ανά κλήση, επιστρέφει score 0–100 και cross-aspects.
Βήμα 4: Καθημερινοί горοσκόποι
Ενότητα με τίτλο «Βήμα 4: Καθημερινοί горοσκόποι»Για engagement, οι καθημερινοί горοσκόποι είναι must have. Το AstroWay τους δημιουργεί από πραγματικά δεδομένα transits:
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, // υποχρεωτικό να εμφανίζεται στο UI! });});Σημαντικό: Το περιεχόμενο που δημιουργείται από AI περιλαμβάνει disclaimer, το οποίο πρέπει να εμφανίζεις στους χρήστες (σύμφωνα με τους Όρους Χρήσης). Μην το αφαιρείς.
Βήμα 5: Caching
Ενότητα με τίτλο «Βήμα 5: Caching»Οι καθημερινοί горοσκόποι είναι ίδιοι για όλους τους χρήστες με την ίδια ημέρα γέννησης και παρόμοιους γενέθλιους χάρτες. Κάνε caching επιθετικά:
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 διαθέτει επίσης caching 5 λεπτών (X-Cache: HIT), αλλά για περιεχόμενο μεγάλης διάρκειας χρειάζεται caching από εσένα.
Βήμα 6: Ανάπτυξη
Ενότητα με τίτλο «Βήμα 6: Ανάπτυξη»Μπορείς να χρησιμοποιήσεις οποιαδήποτε πλατφόρμα. Για γρήγορη εκκίνηση, χρησιμοποίησε το Vercel ή το Railway:
# vercel.json{ "functions": { "src/server.ts": { "runtime": "@vercel/node" } } }Στην πλατφόρμα, ρύθμισε το env ASTROWAY_API_KEY.
Προγραμματισμός προϋπολογισμού
Ενότητα με τίτλο «Προγραμματισμός προϋπολογισμού»Αν έφτασες μέχρι εδώ, υπολόγισε την μηνιαία κατανάλωση credits πριν την κυκλοφορία:
credits/month = DAU × (avg_charts_per_user × 20 + avg_synastries × 50 + avg_horoscopes × 20) × 30Για 100 DAU με 1 χάρτη + 1 горοσκόπο + 0.3 synastry ανά χρήστη την ημέρα:
100 × (20 + 20 + 0.3 × 50) × 30 = 165 000 credits / μήναΑυτό αντιστοιχεί στο πλάνο Starter στα $19/μήνα (200K credits).
Τι ακολουθεί
Ενότητα με τίτλο «Τι ακολουθεί»Προηγμένες λειτουργίες που αξίζει να προσθέσεις καθώς μεγαλώνεις:
- Overlay transits — το
/v1/transitsδείχνει τις τρέχουσες θέσεις των πλανητών στον γενέθλιο χάρτη - Πρόοδοι — το
/v1/progressionsγια την ψυχολογική ανάπτυξη - Solar return — το
/v1/solar-returnγια την «πρόβλεψη για ένα χρόνο από την ημέρα γενεθλίων» - Human Design — το Human Design API ανοίγει έναν εντελώς νέο λειτουργικό τομέα
- Αστροχαρτογραφία — το
/v1/acgχαρτογραφεί πού πρέπει να ζήσει ο χρήστης
Κάθε λειτουργία είναι δύσκολο να υλοποιηθεί από το μηδέν, αλλά — μία κλήση API από το AstroWay.
- Λάβε ένα δωρεάν API key — 10.000 credits / μήνα
- Πλήρης αναφορά API — όλα τα 723 endpoints
- Birth Chart API — λεπτομερής τεκμηρίωση για το endpoint χάρτη
Αυτή η ίδια Swiss Ephemeris που υπάρχει στο Solar Fire — σε 4 γραμμές κώδικα.
Δωρεάν κλειδί χωρίς κάρτα. 5.000 αιτήματα ανά μήνα μέχρι την πρώτη πληρωμή.