
Independent project
Esoteric Numbers
A numerology platform in 67 languages that treats a niche full of paywalls and email gates with full production seriousness, free, private, and properly engineered.
Visit the projectIt started with a numerology book and a lazy evening. I got tired of doing the exercises by hand, so I wrote a program to do them for me. It has refused to stop growing since.
Atlantic Forge
The stakes
Esoteric Numbers began with a book and a lazy evening. I was reading about numerology and doing the exercises by hand, working names and birth dates into numbers, until the repetition stopped being fun. So I did what engineers do when a task turns mechanical: I wrote a small terminal program to run the calculations for me. Then I gave it a simple interface, just to make it more visual. And somewhere in there, the project stopped being for me.
Because I had seen what was already out there. The existing platforms were expensive for the reader and hard to move through: dated sites, readings held hostage behind an email address or a paywall, and no word anywhere about what happens to the name and birth date you type in. If I wanted these calculations, other people did too, and nothing said they should have to pay a gatekeeper for arithmetic. The goal set itself: a platform free at its core, honest about privacy, easy to navigate, and built to reach as many people as possible.
If a site asks for your name and your birth date, it owes you encryption, not an email gate.
The move
The unconventional part was refusing to treat a “fun” niche casually. Esoteric Numbers is engineered like a product with something to lose: personal data encrypted at rest, accounts behind OAuth and two-factor authentication, payments through Stripe rather than a checkout hack, and full observability from the browser down to the background jobs, so one person can run it properly and know, rather than hope, that it is healthy.
A few new calculators in, the honest reading was that the platform was still short of its potential. Reaching people, sustainably, is not a wish; it is an engineering problem, and the answer was the translation layer. Sixty-seven locales is not a project you commission once; it is a maintenance burden that compounds with every content change. So the platform maintains itself: a language model running on local hardware helps translate new content and keep every locale current as the calculators evolve. No agency retainer, no per-word API bill, and no locale quietly rotting.
The widening continues: a blog, and coverage of numerology traditions across the world, the step from a calculator toward a reference.
What shipped
A full production SaaS. A Nuxt 4 front end talks to a Django backend over GraphQL, backed by PostgreSQL. Background work runs on Celery with RabbitMQ and Redis. PDF reports are generated by a dedicated service, and the whole system is watched by Sentry and New Relic. Dozens of calculators across multiple numerology traditions, all free.
The stack, and why
Django, rather than a JavaScript backend. The parts of this platform that could actually hurt someone, payments, authentication, encrypted personal data, are solved, audited problems in Django’s ecosystem. Stripe integration, OAuth, two-factor auth, and field-level encryption all have mature, battle-tested libraries. Rebuilding that security surface fresh on a Node stack would have been weeks of work to arrive at something less proven. Python is also a comfortable home for the calculator logic itself, dozens of numerological systems that are essentially careful arithmetic over names and dates.
GraphQL, rather than REST. Dozens of calculators multiplied by 67 locales means hundreds of slightly different data needs. As REST, that becomes either a sprawl of endpoints or a few bloated ones that over-fetch on every request. One typed GraphQL schema lets each page ask for exactly what it renders, and the contract between front and back end is checked rather than remembered.
Nuxt, rather than a client-rendered SPA. The entire acquisition story is organic search in 67 languages. A SPA renders its content after the crawler has left; Nuxt renders every locale’s pages on the server, with proper i18n routing, so each language is a first-class, indexable site. The alternative was invisibility in exactly the searches the platform exists to answer.
What it changed
- Visitors read in their own language, in 67 locales, with no email gate in the way
- Personal data is encrypted and protected by 2FA, in a space that offers neither
- Payments, background jobs, and observability run like any serious production system
- The translation pipeline maintains itself with a local model, so reach does not decay

