Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Numerology that shows its math, and never leaves your browser.
LifestyleTypeScript · CSSGitHub @edemochaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A numerology website built from Numerology web implementation plan.pdf. A pure TypeScript engine and a static content bank run in the visitor's browser, and a composer stitches them into life, year, month and day readings. The server never sees a name or a birth date.
Built by Danial Adam. The credit shows in the site footer, at the end of the printed year report and on the share image; it lives in one constant, CREDIT in apps/web/src/lib/site.ts.
"Ninefold" is a placeholder name. It lives in apps/web/src/lib/site.ts and apps/web/messages/en.json.Read the full README ↗A numerology website built from Numerology web implementation plan.pdf. A pure TypeScript engine and a static content bank run in the visitor's browser, and a composer stitches them into life, year, month and day readings. The server never sees a name or a birth date.
Built by Danial Adam. The credit shows in the site footer, at the end of the printed year report and on the share image; it lives in one constant, CREDIT in apps/web/src/lib/site.ts.
"Ninefold" is a placeholder name. It lives in apps/web/src/lib/site.ts and apps/web/messages/en.json.
npm install
npm run dev # content is released first, then Next.js dev server
npm run verify # typecheck, unit tests, content lint, production build, end-to-end tests
| Command | What it does |
|---|---|
npm test | Vitest: golden vectors, 200-profile cross-check, properties, composer, pipeline, web helpers, the plan's flip rates |
npm run content:lint | The guardrails: banned claims, certainty words, fear hooks, length, reading level, near-duplicates, reflection prompts, gaps |
npm run content:release | Lint, validate against the JSON Schemas, write versioned static layers to apps/web/public/content/ |
npm run content:snapshot / content:diff | Save the 30-profile by 20-date composed readings; show which snippets changed and how many readings they touch |
npm run content:gate -- --level 3 | Check a launch gate from the plan |
npm run content:gate -- --pair --level 2 | Check a Between us gate (P1 to P3) |
npm run content:draft -- <id> [--run] | Offline drafting prompt; --run calls the API when ANTHROPIC_API_KEY is set |
npm run content:sheet -- export / import | Review spreadsheet with draft, edited, approved statuses |
npm run build | Release content, then build the static site into apps/web/out |
npm run e2e | Playwright against the built site: flows, privacy, axe, CSP, time zones |
packages/engine pure TypeScript, no dependencies, dates as three integers
packages/content manifest of every slot, JSON Schemas, guardrails, meaning sheets, voice guide, authored snippets
packages/composer engine output + content + variant index -> reading objects
apps/web Next.js (App Router), static export, Tailwind, hand-built SVG with d3 scales
tools/content-pipeline lint, release, snapshot/diff, gates, draft, review sheet
tests/golden the plan's test vectors as JSON
tests/reference a second, independent implementation of the arithmetic
tests/e2e Playwright
Nine numbers, nine colours. Each number owns one hue (a bright fill, a deep tone and a pale tint) and keeps it on every screen, so colour on this site always means a number. The rest is a white page and one blue-black ink. Bricolage Grotesque for headings and the big numerals, Geist for text, Geist Mono for the working, Phosphor icons. Controls are pills, containers are soft, and there are no gradients, shadows or entrance animation. The rules, the contrast figures and how they are held in place are in docs/design.md; tests/e2e/theme.spec.ts fails if a page drifts back to a template look.
Every function returns its intermediate steps for the "why this number" panel. Every default sits behind a switch under Advanced, and every result shows a chip naming the convention in use.
tests/flip-rates.test.ts.tests/reference is written from the formula table without importing the engine. 200 random profiles across every convention agree on every output.Date. "Today" is the visitor's local calendar date and flips at local midnight, tested from UTC+14 to UTC-12.Two readings the plan left open, so you know what the code does:
2,584 snippets, 80,400 words, every slot filled, lint clean. The structure follows the plan (life 421, year 165, month 108, day 587: 1,281 snippets and 34,215 words) plus 810 cautions, 217 for Between us and 276 for the Chaldean tradition and the detailed shadows (see below). Every snippet is a draft. I wrote them from the meaning sheets and the voice guide, and the plan is explicit that a human edits and approves the text.
packages/content/src/manifest.ts and drafting longer text is a normal editorial pass.meaning-sheets/ (one page per number) and voice-guide.md are drafts for the owner's approval. Per Gate 1, nothing further should be drafted until they are approved.packages/content/status.json (empty: all draft). Release defaults to allowing drafts; set CONTENT_MIN_STATUS=approved for launch.Gate 3 fails today, correctly: 0 of 2,584 snippets are approved. The variety condition passes.
The site starts in the Chaldean tradition and says plainly what that is: the name points to Babylon, but no ancient text sets the system out, and the version in use was written down in the early 1900s (Cheiro, Sepharial). Nothing here claims it predicts anything.
dateRule: 'D' (every digit of the date in one flat sum, no masters), no masters in names, pinnacles or maturity, and a compound on each result: the first total on the way down that falls from 10 to 52. A total above 52 is read at the next total down (64 reads as 10), and a single digit has no compound. The 9 is held back, so a Chaldean name grid has eight numbers and no subconscious self. withTradition() switches the tradition together with the three switches that belong to it; DEFAULT_CONVENTIONS is now Chaldean and PYTHAGOREAN_CONVENTIONS keeps the old defaults, which the older tests pin explicitly. The independent reference in tests/reference has its own Chaldean rules, and 200 random profiles agree on values and compounds.life.compound: for each of 10 to 52 an overview (what the tradition says, with its traditional image), the shadow side and a practice that ends on a question. Cheiro gave images to some and wrote that the rest carry the reading of an earlier number (33 reads like 24, 49 like 31, 52 like 43); those are titled "The Echo of ..." and say so, and each has its own text through the shade its digits add. Each compound has a public page at /chaldean/N, and /chaldean shows the letter table, a worked name and date, the planets and all 43.life.shadow: eleven parts for each of the twelve numbers (1 to 9, 11, 22, 33): where it comes from, how it sounds inside, at work, with people close to you, with time and energy, under pressure, early signals, what feeds it, what loosens it, the gift inside it, and a seven-day practice. life.shadowLens adds a line for how the shadow reads as a life path, an expression, a soul urge and so on. The Shadow tab shows each of your numbers this way, one reading for each different number, and in the Chaldean tradition adds the shadow of each compound. Every public number page carries its shadow in detail too.life.planet: the planet Cheiro's table gives each digit (1 the Sun, 2 the Moon, 3 Jupiter, 4 Uranus, 5 Mercury, 6 Venus, 7 Neptune, 8 Saturn, 9 Mars), shown on the number pages and the Chaldean overview.A caution is a short, practical nudge about a behavior to watch, never a forecast. There are 810: 3 layers (year, month, day) by 9 numbers by 5 facets (money, work, relationships, energy, mind) by 6 variants. Each has a label (WATCH OUT, GO EASY ON or AVOID), a headline of at most 8 words, a body of at most 35 words, and the shadow trait it comes from. They follow the product owner's brief, which is also the drafting prompt for these slots (npm run content:draft -- day.caution.8.energy.v2).
packages/content/src/rules.ts if you want it reversed.manifest.ts, not in the bank, and a test checks that they are identical on different numbers and contain no digit.A tab in the reading that sets two people side by side. It works for any two people (friend, parent, colleague, someone you love) and it never scores or rules on a pair. The research and the plan behind it are in docs/relationship-feature-plan.md; phases 1 to 4 of that plan are built.
tests/golden/pair.json.tests/e2e/between.spec.ts and between-more.spec.ts check that with distinctive names, nicknames and dates for two people added, and analytics stay off if anyone added is under 16.tests/e2e/privacy.spec.ts types a distinctive name and birth date, visits every screen and export, and fails the build if either appears in any request URL, header or body or in any browser storage. It also asserts every request goes to this origin.connect-src 'self' (written by apps/web/scripts/headers.mjs for Cloudflare Pages/Netlify, Vercel and the test server) makes the browser itself refuse requests to other origins. tests/e2e/csp.spec.ts checks that, and that the whole app runs under it.NEXT_PUBLIC_PLAUSIBLE_DOMAIN is set; they are cookieless, event-allowlisted, carry no properties, and stop for under-16s.messages/en.json and a tiny t() rather than next-intl. The keys are stable, so next-intl is a drop-in when a second language arrives.Link prefetching is off: some static hosts do not serve Next's per-segment prefetch files.vitest.config.ts leaves half the logical cores free, and the two wall-clock speed tests take the best of five runs, so heavy test files running beside them on a laptop do not make them flaky.NEXT_PUBLIC_SITE_URL), and a name. On Vercel, keep the project's Root Directory as apps/web: its vercel.json (written by scripts/headers.mjs) installs and builds from the repository root, because TypeScript, the workspaces and the content release (public/content is not committed) all live there. Leave the project's Output Directory unset: the Next.js preset finds the static export itself, and pointing it at out fails with "routes-manifest.json couldn't be found". Set NEXT_PUBLIC_SITE_URL in the project's environment variables. The site is a static export, so any static host works the same way: run npm ci and npm run build at the root and serve apps/web/out with the headers in public/_headers.pairs.md, the voice-guide addendum and the 217 snippets (Gates P1 and P2); get the second-person wording reviewed (the privacy and terms text, and under-16 handling for someone you add); run the 5 to 8 person check in gate P3; and check the Method page's research claim against a fuller literature search. The Joel et al. (2020) finding it cites was checked against the paper's text; the claim that no controlled test links birth numbers to how two people get on rests on the same limited search as the existing Method text.NEXT_PUBLIC_SITE_URL set for their canonical links and the sitemap, like the rest of the site, and the host should serve /between/3-7 as a static page. Phase 3 also leaves out the circle's pair-to-pair readings between two people who are not you, and a personality-number lens. See the plan./between is a nine by nine grid (every cell a link, every cell alike, so it cannot read as a map of better and worse pairs), and /between/3-7 and its 44 siblings are static pages, one per pair of single digits, smaller number first, so a pair is a page in only one order. A page gives each number's relationships text, the three pair sections, the master-number notes that apply, a short honest account of what it cannot tell you with a link to the research on the Method page, a grid to move to another pair, and a canonical link and description. They are in the sitemap (46 new entries), robots does not block them, and each number's page now links to its nine pairs. They carry no dates and no personal data.pair content layer, loaded only on this tab: 45 pairs of single digits by 3 sections, 4 master-number notes, 15 for the five gap distances, 2 name-lens frames, 45 bridge lines and 16 questions for the four kinds of relationship. They are drafts. The notes for writing them are packages/content/meaning-sheets/pairs.md and the "Between us" section of the voice guide.npm run content:gate -- --pair --level N): P2 needs every pair snippet owner-approved. The page is also meant to be shown to 5 to 8 people in pairs before launch, asking what it said about whether they are right for each other.life.compoundlife.shadowlife.shadowLenslife.planet