WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
시간대별 정확한 월령·월궁·식 제공, 자연어 질문·캘린더 구독·파일 다운로드
Exact Moon phases, Moon sign ingresses, and eclipses in your timezone. Ask the almanac in plain words, subscribe in your calendar app, or download ICS and PDF.
라이프스타일TypeScript · HTMLGitHub @bsmithforge온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Client-side astronomical calculation powered by [email protected]
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Live at astromoon.ca
A Moon phase and zodiac calendar that computes everything in your browser: exact New, Quarter, and Full Moon times, tropical Moon sign ingresses to the second, solar and lunar eclipse peaks, and a daily noon Moon sign snapshot, all shown in the timezone you choose.
webcal:// feed to Apple Calendar, Google Calendar, Outlook, Fastmail, Proton, Thunderbird, or anything that accepts a calendar URL. It covers a rolling window (1 month back, 12 months ahead) and refreshes on its own, so it never runs out.The feed is served by a small serverless function:
GET https://astromoon.ca/api/calendar?tz=America/Edmonton&hemi=northern&phases=1&ingresses=1&daily=0&eclipses=1
| Parameter | Values | Default |
|---|---|---|
tz | Any IANA timezone | UTC |
hemi | northern | southern (Moon illustration orientation) | northern |
phases, ingresses, daily, eclipses | 1 | 0 | 1 |
Open Ask to ask about phases, signs and eclipses in plain words ("When is the next full moon in Scorpio?"). You can also describe an export ("a printable calendar of next year's full and new moons") or search the traditional themes ("planting a garden") on your device. See How the AI features work.
Positions come from astronomy-engine (VSOP87 / ELP2000-82), pinned to 2.1.19. The Moon's geocentric apparent ecliptic longitude is mapped onto the tropical zodiac (twelve equal 30° signs from the March equinox); ingress times are refined by bisection to a one-second bracket. The Methodology panel on the site compares computed times against published reference values. Traditional sign and phase interpretations are included for interest and are not predictions.
The rule throughout: the AI chooses and words; the astronomy engine supplies every fact. A language model never states a date or time, and nothing it writes ends up in an exported file.
sequenceDiagram
participant B as Browser
participant F as /api/ask (Vercel function)
participant M as Free-tier LLM
participant E as Almanac tools (astronomy-engine)
B->>F: question, timezone, hemisphere
F->>M: system prompt, question, tool schemas
M-->>F: tool calls
F->>E: e.g. find_moon_phases(start, end, phases, sign)
E-->>F: records with stable IDs
F->>M: compact tool results
M-->>F: answer citing {{event:<id>}} tokens
F->>F: check every token, reject dates the model wrote
F-->>B: answer segments, engine records, tool trace
Ask the Almanac (server/ai/, src/utils/almanacTools.ts): the model calls six deterministic, validated tools, which find phases, sign changes, eclipses, the Moon on a date, the app's own traditional meanings, and export settings. Its answer cites events as tokens, and the server checks every token against what the tools returned. If the model writes a date itself, it gets one correction, and after that the answer becomes a plain list of the results. The browser shows each event's date and time from the engine's records. "How this was answered" lists every lookup.
Describe your export: prepare_export turns a request into export settings, never a file. They're validated with the same limits as the export dialog, which opens prefilled for review. A test checks that a draft and the same settings entered by hand produce identical ICS bytes.
Theme search (src/utils/themeSearch.ts): runs entirely in the browser. A small open-source embedding model (all-MiniLM-L6-v2, about 29 MB, downloaded once on the first search) runs in a Web Worker and matches your words against the app's own sign and phase copy. It then lists the coming days with that sign or phase. Nothing you type is sent anywhere.
Providers and cost: the endpoint speaks the OpenAI-compatible Chat Completions format through plain fetch, so the provider is configuration. It runs on free tiers with no billing attached: Groq (gpt-oss-120b) is primary, and Google Gemini (3.5-flash-lite) is the fallback outside the EEA, UK and Switzerland, as Gemini's free-tier terms require. When the quota runs out, Ask says the almanac is resting and offers theme search.
Evidence:
Details: docs/ai-evals.md. The phased plan and its decision log: docs/ai-features-plan.md.
npm ci
npm run dev # Vite on http://localhost:3000, also serves /api/calendar and /api/ask
npm test # node test runner: ICS, feed, runtime emulation, almanac tools, Ask, exports, theme search
npm run lint # tsc --noEmit
npm run build # static build to dist/, plus the bundled API functions
Stack: React 19, TypeScript, Vite 6, Tailwind CSS 4, jsPDF. No database and no auth. API keys are only needed for Ask: copy .env.example to .env.local and add free-tier keys to try it locally. See AGENTS.md for the code map, domain rules, and conventions, and CONTRIBUTING.md if you'd like to send a change.
Fork it and import the fork into Vercel with the Vite preset. No environment variables are required; pushes to main deploy. To turn on Ask, add the AI_* variables from .env.example in Vercel (free-tier keys, no billing), and add a WAF rate-limit rule on /api/ask. Without them, Ask says it isn't available and everything else works. The feed handler in server/calendar.ts is bundled by esbuild during npm run build and exposed through api/calendar.js, and vercel.json sets caching headers. The subscription URL is built from the page origin, so the feed works on whatever domain you deploy to.
Things you'll want to change for your own deployment:
index.html: <title>, canonical URL, Open Graph / Twitter URLs, and the JSON-LD blockpublic/robots.txt and public/sitemap.xml: site URLpublic/og-image.jpg, public/masthead_banner.jpg, public/moon_engraving.jpg: artworksrc/App.tsx: the "Made by" footer linksrc/utils/icsExport.ts and src/utils/subscription.ts: calendar name and PRODIDAny static host works for the app itself. Only the live feed and Ask need serverless functions; ICS download, PDF export and theme search run entirely in the browser.
MIT. Astronomical calculations use astronomy-engine (MIT). Sign and phase interpretations are traditional and offered for interest only.
Made by Brody Smith.