尚未检测到更新。GitHub 发布版本后会显示在这里。
Free Oikos Map landing page and builder powered by Love on The World
翻译准备中
正在加载完整 README。
查看完整 README ↗A free landing page and interactive tool for creating a custom Oikos Map: a simple visual way to name, pray for, and intentionally love the people God has placed around you.
Live site: oikosmap.com
Powered by Love on The World and Thy Kingdom Network.
index.html, growth.html, connect.html) with tailored titles, descriptions, canonicals, and Open Graph tagsog-image.png for social sharing/growth page connected to I Am Reborn/connect page for Kingdom Connect, e3 Canada collaboration, and founder/ministry linksllms.txtnpm install
npm run dev
npm run build
The production output is generated in dist/. Vercel serves the extensionless
routes via "cleanUrls": true in vercel.json.
There are two entry scripts, which keeps each page's payload small:
| Entry | Pages | Contains |
|---|---|---|
src/main.jsx | /, /growth, /connect | the map builder |
src/blog-entry.jsx | /blog, /blog/* | the journal shell |
React and lucide are hoisted into a shared vendor chunk, so blog pages never
download the map builder.
| File | Holds | Loaded by |
|---|---|---|
src/content/posts-meta.js | summaries (title, tags, date…) | listings, related posts, the homepage strip |
src/content/bodies/<slug>.js | one article's full text | that article page only, on demand |
src/content/posts.js | meta + every body, assembled | build only (scripts/build-blog.js) |
Article bodies are split one-per-file and pulled in with import.meta.glob, so
Rollup emits a chunk per article and a reader downloads only the one they opened.
Before this, opening any article downloaded all of them, and every new post made
every article page heavier.
Do not import src/content/posts.js from browser code — it pulls in every
body at once. Use posts-meta.js for listings. posts.js throws at build time
if a post has no matching body module, so a new article cannot ship empty.
src/content/posts-meta.js (give it the next order).src/content/bodies/<slug>.js with a default-exported
{ intro, sections, scripture, network, cta }.bodies map in src/content/posts.js.npm run build — the shell, sitemap, feed and llms files regenerate.Import this repository into Vercel and use the default Vite settings:
Vitenpm run builddistSigning up starts a six-part encouragement sequence written in api/_journey.js:
| # | Sends | Subject |
|---|---|---|
| 1 | immediately | Your oikos is not an accident |
| 2 | in 2 days | Start with one name (Pray) |
| 3 | in 4 days | Love that shows up (Care) |
| 4 | in 7 days | Your story is enough (Share) |
| 5 | in 10 days | And then they reach theirs (Disciple) |
| 6 | in 14 days | You play a real role in this |
The whole sequence is queued at signup using Resend's scheduled_at, so there
is no cron job and no dashboard automation to keep in sync — the emails are the
code. Sending happens from the team.thykingdom.net domain.
Set the API key in Vercel (the sender address already defaults correctly):
vercel env add RESEND_API_KEY production
Preview the emails locally without sending anything:
node -e "import('./api/_journey.js').then(m=>{const b=m.buildJourney('Daniel');console.log(m.renderEmail(b[0],'#'))})" > preview.html
Every email carries List-Unsubscribe headers and a footer link to
/api/unsubscribe?token=…. Unsubscribing calls the token-gated
oikos_unsubscribe Postgres function, which marks every row for that address and
returns the queued Resend ids so the rest of the sequence is cancelled.
The production lead endpoint writes to public.oikos_map_leads in the THY KINGDOM NETWORK - MAIN Supabase project when these Vercel environment variables are set:
vercel env add SUPABASE_URL production
vercel env add SUPABASE_ANON_KEY production
Use:
SUPABASE_URL=https://vmpkiwfvnlzraabtjkig.supabase.co
The table migration is codified at supabase/migrations/20260717141000_create_oikos_map_leads.sql.
Optionally create a GoHighLevel workflow with an inbound webhook trigger, then add the webhook URL to Vercel:
vercel env add GHL_WEBHOOK_URL production
vercel env add GHL_WEBHOOK_URL preview
The site posts leads to /api/lead, which stores name, email, interest, page, source, referrer, timestamp, and lightweight map stats in Supabase. If GHL_WEBHOOK_URL is configured, it also forwards the lead to GoHighLevel.