Interactive charting / domain modeling / AI interpretation
Astra Synastry
A full-stack astrology workbench I built to make natal charts and relationship comparisons easier to explore.
It brings chart wheels, cross-aspect grids, compatibility breakdowns, and optional AI interpretation into one
interface, with a separate calculation engine underneath the visual layer.
Synastry report: chart comparison, key placements, and compatibility breakdowns in one view.Dashboard: birth-data entry, saved profiles, and relationship report creation.Current transits: planetary positions and aspect relationships arranged around the zodiac.
System shape
Separates shared TypeScript contracts, an astrology calculation engine, an Express API, and a React interface in a pnpm monorepo.
Uses Swiss Ephemeris through sweph for planetary calculations, alongside house, aspect, and aspect-pattern logic.
Supports natal, synastry, composite, and Davison charts, with transits and secondary progressions in the engine.
Keeps OpenAI and Anthropic interpretation behind a server-side provider abstraction, with a mock fallback when keys are absent.
The interesting interface problem is making a dense domain inspectable. A relationship report needs to connect
two charts, their individual placements, and the patterns between them without reducing everything to a single
number. I built linked visual summaries and detail views so someone can move from the overall picture to the
specific placements behind it.
Materials
React, TypeScript, Vite, React Router, and Tailwind CSS.
SVG chart wheels and aspect grids, with Recharts for balance and house-occupancy visualizations.
Express and Prisma, with SQLite as the default local database.
Swiss Ephemeris, OpenStreetMap Nominatim, geo-tz, and Vitest engine tests.
Interaction model
Compare two people in a synastry biwheel, with controls to show or hide chart points.
Inspect key placements, element and modality balance, and house occupancy through focused detail dialogs.
Read the cross-aspect grid alongside composite and Davison charts for different views of the relationship.
Move into a dedicated current-transits view or open the AI chat drawer for further interpretation.
Calculation and interpretation
Compatibility comes from an explicit weighted model: cross-chart aspects contribute to communication, emotional,
passion, stability, growth, and conflict categories according to point significance and aspect exactness.
The AI layer adds narrative interpretation; it does not calculate the chart or determine those scores.
The scores are astrological heuristics, not scientifically validated predictions of relationship outcomes.
Keeping that distinction visible matters as much as making the calculations repeatable.
Engine boundaries
The default ephemeris mode uses the built-in Moshier approximation without external data files. Chiron requires
additional ephemeris files and is omitted when those are unavailable. The repo includes engine tests against
astronomical reference points and synastry scenarios, keeping calculation checks separate from the interface.
Prototype boundary
This is a local, single-user application with no authentication, not a hosted multi-user service. AI features
require configured provider keys for live responses; the rest of the charting workflow remains usable without
an AI account. Public deployment would need authentication and appropriate protection for stored birth data.