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.

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.

Why it belongs

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.