Culturalverse
Culturalverse Admin
Content Management Panel
← Back to Culturalverse
Dashboard
culturalverse content overview
Total Lessons
Published Live
Drafts
3
Active Cultures
Recent Activity
Loading activity…
Quick Actions
All Lessons
loading…
ID Title Module Read time Status Actions
Loading lessons…
Lessons
IDTitleRead timeStatusActions
Loading…
New Lesson
Add or edit a lesson in the Culturalverse
Prefix: km- (Kānaka) · ke- (Kemet) · bridge- (Bridge)


Supports: <h4> <p> <ul><li> <callout> <callout type="gold"> <facts>val::key|val::key</facts> <twocol left="" right="">…||…</twocol> <concepts> <quote cite="">
0 words · 0 chars
Controls display order within the module
Supabase Status
Checking Supabase connection…
Globe Cultures
Manage cultures shown on the Cosmic Weave globe
IDNameThemeStatusActions
kanaka 🌺 Kānaka Maoliemerald Live
kemet ☥ Ancient Kemetgold Live
bridge 🌐 The Bridgebridge Live
dreamtime 🌏 Dreamtimerust Coming Soon
dogon 🪘 Dogonamber Coming Soon
vedic 🕉️ Vedicsaffron Coming Soon
💡 Culture edits update culturalverse-data.js — use Copy to File after saving to get the formatted entry.
Supabase DB Setup Guide
Run these SQL commands in Supabase → SQL Editor to enable live content management
Step 1 — Create the lessons table
Go to Supabase → SQL Editor → paste and run:
create table cv_lessons ( id text primary key, -- e.g. 'km-laau' module text not null, -- 'kanaka' | 'kemet' | 'bridge' module_id text, -- e.g. 'kanaka-healing' lesson_num text, -- e.g. 'KM·09' title text not null, read_time text, -- e.g. '16 min' lead_text text, -- lead paragraph (plain text) content text, -- full lesson content (HTML/tags) sources text, -- sources block (newline separated) mana integer default 100, sort_order integer default 0, status text default 'draft', -- 'draft' | 'live' created_at timestamptz default now(), updated_at timestamptz default now() ); -- Row Level Security alter table cv_lessons enable row level security; create policy "Public can read live lessons" on cv_lessons for select using (status = 'live'); create policy "Admins can manage all lessons" on cv_lessons for all using ( exists ( select 1 from profiles where profiles.id = auth.uid() and (profiles.theme->>'_isAdmin')::boolean = true ) );
Step 2 — Grant yourself admin access
In Supabase → Table Editor → profiles → find your row → edit the theme JSONB column. Add "_isAdmin": true to the existing JSON object:
{ "_isAdmin": true, "_cvLessons": [], "_cvMana": 0 /* ... keep all your existing theme keys */ }
Once this is set, this admin panel will be accessible only to your account. Anyone else who tries to load the page will be redirected back to Culturalverse.
Step 3 — Seed your existing lessons into the DB
Once the table exists, run this from the SQL Editor to insert the current lessons from culturalverse-data.js as a starting point. Paste one lesson at a time or build an import script:
insert into cv_lessons (id, module, lesson_num, title, read_time, status, sort_order) values ('km-kumulipo', 'kanaka', 'KM·01', 'The Kumulipo — Sacred Chant of Creation', '12 min', 'live', 1), ('km-wakea', 'kanaka', 'KM·02', 'Wākea & Papahānaumoku', '8 min', 'live', 2), ('km-starcompass','kanaka','KM·03', 'The Star Compass', '10 min', 'live', 3), ('km-hokuleaa', 'kanaka', 'KM·04', 'Hōkūleʻa — The Voyaging Canoe', '8 min', 'live', 4), ('km-ahupuaa', 'kanaka', 'KM·05', 'The Ahupuaʻa', '10 min', 'live', 5), ('km-loikalo', 'kanaka', 'KM·06', 'Loʻi Kalo & Loko Iʻa', '10 min', 'live', 6), ('km-olelo', 'kanaka', 'KM·07', 'ʻŌlelo Hawaiʻi', '8 min', 'live', 7), ('km-hula', 'kanaka', 'KM·08', 'Hula — The Body as Sacred Text', '8 min', 'live', 8), ('km-laau', 'kanaka', 'KM·09', 'Laʻau Lapaʻau — Hawaiian Plant Medicine', '16 min', 'live', 9), ('ke-nun', 'kemet', 'KE·01', 'Nun & the Primordial Waters', '8 min', 'live', 1), ('ke-ennead', 'kemet', 'KE·02', 'The Heliopolitan Ennead', '12 min', 'live', 2), ('ke-ptah', 'kemet', 'KE·03', 'Ptah & the Memphite Theology', '8 min', 'live', 3), ('ke-maat', 'kemet', 'KE·04', 'Maʻat — Truth, Justice, and Cosmic Balance', '10 min', 'live', 4), ('ke-maat-politics','kemet','KE·05','Maʻat as Political Philosophy', '7 min', 'live', 5), ('ke-medunetjer','kemet', 'KE·06', 'Medu Netjer — Words of the Gods', '9 min', 'live', 6), ('ke-medicine', 'kemet', 'KE·07', 'Kemetic Medicine — Imhotep, the Papyri, and Healing','14 min','live',7), ('bridge-darkness','bridge','BR·01','Both Begin in Primordial Darkness and Water', '6 min', 'live', 1), ('bridge-pairs', 'bridge', 'BR·02', 'Creation Through Paired Complementary Forces', '6 min', 'live', 2), ('bridge-aloha-maat','bridge','BR·03','Aloha and Maʻat — Two Philosophies of Cosmic Alignment','10 min','live',3) on conflict (id) do nothing;
Step 4 — Update culturalverse-data.js to fetch from Supabase
Once the table is populated, replace the static CULTURALVERSE_DATA loader in culturalverse-lessons.js with a Supabase fetch. The admin panel will then be the single source of truth for all lesson content — no more editing the data file by hand.
// In culturalverse-lessons.js — add at init: async function loadLessonsFromDB() { const sb = window.piko_supa; if (!sb) return false; // fallback to static data const { data, error } = await sb .from('cv_lessons') .select('*') .eq('status', 'live') .order('module') .order('sort_order'); if (error || !data?.length) return false; // merge DB content into CULTURALVERSE_DATA lessons data.forEach(row => { const culture = CULTURALVERSE_DATA.cultures.find(c => c.id === row.module); if (!culture) return; culture.modules.forEach(mod => { const lesson = mod.lessons.find(l => l.id === row.id); if (lesson) { // overwrite with DB content if present if (row.title) lesson.title = row.title; if (row.content) lesson.content = row.content; if (row.read_time) lesson.readTime = row.read_time; } }); }); return true; }
Settings
Admin account & password management
Current Auth Mode
⚙️ Change Local Password
Changes the admin username password stored in this browser. Minimum 12 characters. This only affects the local fallback — your Pikoverse password is managed via pikoverse.xyz.
🔗 Switch to Supabase Auth
To sign in with your Pikoverse email instead of the local username/password, run this SQL in Supabase → SQL Editor with your actual email:
update profiles set theme = jsonb_set( coalesce(theme, '{}'), '{_isAdmin}', 'true'::jsonb ) where id = ( select id from auth.users where email = 'your@email.com' ); -- Confirm: select id, display_name, theme->>'_isAdmin' as is_admin from profiles where theme->>'_isAdmin' = 'true';
Once set, sign out and sign back in using your Pikoverse email. Saves will go directly to Supabase.