{"id":61,"date":"2026-05-19T02:15:46","date_gmt":"2026-05-19T02:15:46","guid":{"rendered":"https:\/\/trubianvillage.com\/vangu\/home\/"},"modified":"2026-07-19T22:58:31","modified_gmt":"2026-07-19T22:58:31","slug":"home","status":"publish","type":"page","link":"https:\/\/trubianvillage.com\/vangu\/","title":{"rendered":"Home"},"content":{"rendered":"\n\n\n\n\n\n\n\n\n\n\nThe Vangu Book of 144 Reflections\nWe are united in our commitment to restoring the sacred rhythms of life while empowering individuals and families through cultural continuity and stewardship.\n\n\n<span style=\"color: #f1f1f1;\">To cultivate human beings rooted in truth and committed to family, culture, and community responsibility.<\/span>\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n<title>The 5 Fazes of the Sun \u2014 Working Audiobook<\/title>\n\n<style>\n\n:root {\n    --bg: #050505;\n    --panel: #11100d;\n    --gold: #d7a83d;\n    --gold2: #f1cb67;\n    --text: #f5edd8;\n    --muted: #bcae8c;\n    --line: #725625;\n}\n\n* {\n    box-sizing: border-box;\n}\n\nbody {\n    margin: 0;\n    background: linear-gradient(#0b0b09, #050505);\n    color: var(--text);\n    font-family: Arial, sans-serif;\n}\n\nheader {\n    padding: 34px 18px;\n    text-align: center;\n    border-bottom: 2px solid var(--gold);\n}\n\nh1,\nh2,\nh3 {\n    font-family: Georgia, serif;\n    color: var(--gold2);\n}\n\nh1 {\n    font-size: clamp(2rem, 6vw, 4.6rem);\n    margin: 0;\n}\n\n.wrap {\n    max-width: 1280px;\n    margin: auto;\n    padding: 20px;\n}\n\n.panel {\n    background: var(--panel);\n    border: 1px solid var(--line);\n    border-radius: 16px;\n    padding: 18px;\n    margin: 18px 0;\n}\n\n.grid {\n    display: grid;\n    grid-template-columns:\n        repeat(auto-fit, minmax(190px, 1fr));\n    gap: 15px;\n}\n\n.phase {\n    border: 1px solid var(--line);\n    border-radius: 14px;\n    overflow: hidden;\n    background: #0b0a08;\n}\n\n.phase img {\n    width: 100%;\n    aspect-ratio: 2 \/ 3;\n    object-fit: cover;\n    display: block;\n}\n\n.phase .body {\n    padding: 12px;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n    font: inherit;\n}\n\nbutton {\n    padding: 10px 13px;\n    border-radius: 8px;\n    border: 1px solid var(--line);\n    background: #1b170e;\n    color: white;\n    cursor: pointer;\n}\n\nbutton.primary {\n    background:\n        linear-gradient(\n            135deg,\n            var(--gold),\n            var(--gold2)\n        );\n\n    color: #171006;\n    border: 0;\n    font-weight: bold;\n}\n\n.controls {\n    display: flex;\n    gap: 8px;\n    flex-wrap: wrap;\n    margin: 14px 0;\n}\n\n.reader {\n    display: grid;\n    grid-template-columns:\n        minmax(230px, 360px) 1fr;\n    gap: 22px;\n}\n\n.reader img {\n    width: 100%;\n    border: 1px solid var(--line);\n    border-radius: 12px;\n}\n\n.lesson-text {\n    white-space: pre-wrap;\n    line-height: 1.8;\n    max-height: 650px;\n    overflow: auto;\n}\n\n.status {\n    color: #9fd8c8;\n    margin-top: 10px;\n}\n\n.admin-grid {\n    display: grid;\n    grid-template-columns:\n        repeat(auto-fit, minmax(250px, 1fr));\n    gap: 15px;\n}\n\n.admin-card {\n    border: 1px solid var(--line);\n    border-radius: 12px;\n    padding: 14px;\n    background: #0b0a08;\n}\n\n.admin-card img {\n    width: 150px;\n    height: 220px;\n    object-fit: cover;\n    border-radius: 8px;\n    border: 1px solid var(--line);\n}\n\ninput,\nselect,\ntextarea {\n    width: 100%;\n    padding: 10px;\n    margin: 6px 0 10px;\n    background: #0a0907;\n    color: white;\n    border: 1px solid var(--line);\n    border-radius: 7px;\n}\n\n.hidden {\n    display: none !important;\n}\n\n@media(max-width: 760px) {\n\n    .reader {\n        grid-template-columns: 1fr;\n    }\n\n}\n\n<\/style>\n<\/head>\n\n\n<body>\n\n\n<header>\n\n<h1>\nTHE 5 FAZES OF THE SUN\n<\/h1>\n\n<p>\nALIGN. BREATHE. RISE.\n<br>\nHOUSE OF VANGU\n<br>\nMASTER TREE &#038; RIVER COVENANT\n<\/p>\n\n<\/header>\n\n\n<div class=\"wrap\">\n\n\n<section class=\"panel\">\n\n<h2>\nFive-Part Audio Presentation\n<\/h2>\n\n<p>\nSelect a Faze, read along with the lesson,\nand press Play to hear the complete audio presentation.\n<\/p>\n\n<div\nid=\"phaseGrid\"\nclass=\"grid\">\n<\/div>\n\n<\/section>\n\n\n\n<section class=\"panel\">\n\n<div class=\"reader\">\n\n\n<div>\n\n<img\nid=\"mainImage\"\nalt=\"Lesson image\">\n\n<\/div>\n\n\n<div>\n\n<h2 id=\"mainTitle\">\n<\/h2>\n\n<h3 id=\"mainSubtitle\">\n<\/h3>\n\n\n<div class=\"controls\">\n\n<button\nclass=\"primary\"\nid=\"playBtn\">\n\n\u25b6 Play Lesson\n\n<\/button>\n\n\n<button id=\"playAllBtn\">\n\n\u25b6 Play All Five\n\n<\/button>\n\n\n<button id=\"pauseBtn\">\n\n\u23f8 Pause\n\n<\/button>\n\n\n<button id=\"resumeBtn\">\n\n\u23ef Resume\n\n<\/button>\n\n\n<button id=\"stopBtn\">\n\n\u25a0 Stop\n\n<\/button>\n\n<\/div>\n\n\n\n<label>\nNarrator Voice\n<\/label>\n\n<select id=\"voiceSelect\">\n<\/select>\n\n\n\n<label>\nNarration Speed\n<\/label>\n\n<select id=\"rateSelect\">\n\n<option value=\"0.8\">\n0.8\u00d7\n<\/option>\n\n<option\nvalue=\"1\"\nselected>\n\n1.0\u00d7\n\n<\/option>\n\n<option value=\"1.2\">\n1.2\u00d7\n<\/option>\n\n<option value=\"1.4\">\n1.4\u00d7\n\n<\/option>\n\n<\/select>\n\n\n\n<div\nid=\"status\"\nclass=\"status\">\n\nReady.\n\n<\/div>\n\n\n<div\nid=\"lessonText\"\nclass=\"lesson-text\">\n<\/div>\n\n\n<\/div>\n\n<\/div>\n\n<\/section>\n\n\n\n<section class=\"panel\">\n\n<h2>\nAdministrative Editing Section\n<\/h2>\n\n<p>\nAdministrators can replace pictures,\nedit lesson titles,\nedit subtitles,\nand change the complete lesson text.\n<\/p>\n\n\n<div id=\"loginArea\">\n\n\n<div class=\"admin-grid\">\n\n\n<div>\n\n<label>\nUsername\n<\/label>\n\n<input id=\"adminUser\">\n\n<\/div>\n\n\n<div>\n\n<label>\nPassword\n<\/label>\n\n<input\nid=\"adminPass\"\ntype=\"password\">\n\n<\/div>\n\n\n<\/div>\n\n\n<button\nclass=\"primary\"\nid=\"adminLoginBtn\">\n\nUnlock Editor\n\n<\/button>\n\n\n<\/div>\n\n\n\n<div\nid=\"adminEditor\"\nclass=\"hidden\">\n\n\n<div class=\"controls\">\n\n\n<button\nclass=\"primary\"\nid=\"saveAdminBtn\">\n\nSave All Changes\n\n<\/button>\n\n\n<button id=\"resetAdminBtn\">\n\nReset Original Lessons\n\n<\/button>\n\n\n<button id=\"logoutAdminBtn\">\n\nLogout\n\n<\/button>\n\n\n<\/div>\n\n\n<div\nid=\"adminGrid\"\nclass=\"admin-grid\">\n<\/div>\n\n\n<\/div>\n\n<\/section>\n\n\n<\/div>\n\n\n\n<script>\n\n\n\/*\n=========================================\nADMINISTRATIVE LOGIN\n=========================================\n*\/\n\nconst ADMIN_USERNAME =\n\"administrator\";\n\nconst ADMIN_PASSWORD =\n\"YAKOBA001\";\n\n\n\n\/*\n=========================================\nTHE FIVE LESSONS\n=========================================\n\nUpload these pictures to WordPress\nand replace the filenames below\nwith the actual Media Library URLs.\n\n*\/\n\n\nconst DEFAULT_LESSONS = [\n\n\n{\n\nid: 1,\n\ntitle:\n\"Dawn Rise\",\n\nsubtitle:\n\"The Faze of Awakening\",\n\nimage:\n\"11f.jpg\",\n\nlesson:\n`\nDawn Rise is the moment of awakening.\n\nA new cycle has opened, and you have another\nopportunity to choose your direction.\n\nAwakening begins with awareness.\n\nBefore you can change direction,\nyou must notice where you are.\n\nBecome conscious of your thoughts,\nhabits,\nemotions,\nsurroundings,\nresponsibilities,\nand purpose.\n\nThe next principle is breath.\n\nBreath creates space between impulse and action.\n\nIn that space,\nyou can choose rather than merely react.\n\nUnder the Tree and River Covenant,\nlife itself is received as a responsibility\nand a trust.\n\nThen comes intention.\n\nAsk yourself:\n\nWhat is my responsibility today?\n\nWho depends on me?\n\nWhat must I complete?\n\nWhat must I learn?\n\nWhat must I correct?\n\nIntention transforms random activity\ninto purposeful movement.\n\nDawn Rise also teaches focus.\n\nAttention is a form of power.\n\nWhat repeatedly receives your attention\nbegins to shape your life.\n\nFinally comes alignment.\n\nYour actions,\nvalues,\nwords,\nand responsibilities\nmust move in the same direction.\n\n\nREFLECTION\n\nI open my mind.\n\nI awaken my purpose.\n\nI prepare my spirit\nfor the day ahead.\n\n\nACTION\n\nI breathe deeply.\n\nI set my intention.\n\nI choose focus over distraction.\n\n\nALIGNMENT\n\nI align with the light.\n\nI align with my purpose.\n\nI align with the Most High.\n\n\nToday,\nidentify one responsibility,\none area of growth,\nand one act of service.\n\nBegin your day consciously.\n\nA new day is a new choice\nand a new commitment\nto breathe,\nalign,\nand live.\n`\n\n},\n\n\n\n{\n\nid: 2,\n\ntitle:\n\"Morning Rise\",\n\nsubtitle:\n\"The Faze of Realignment\",\n\nimage:\n\"11b.png\",\n\nlesson:\n`\nMorning Rise is the phase of realignment.\n\nAwakening is only the beginning.\n\nOnce awake,\nyou must examine your direction.\n\nEvery person can drift.\n\nA person can drift from discipline,\nfamily responsibility,\nhealth,\npurpose,\ntruth,\nor service.\n\nRealignment is the ability\nto recognize the drift\nand return.\n\nBegin with honest assessment.\n\nAsk yourself:\n\nWhat is working?\n\nWhat is not working?\n\nWhat am I avoiding?\n\nWhere am I wasting energy?\n\nWhat responsibility have I delayed?\n\nCorrection is not defeat.\n\nCorrection is the decision\nto return to balance\nbefore an error becomes a permanent pattern.\n\nPreparation follows correction.\n\nPurpose requires organization.\n\nStudents prepare before learning.\n\nFarmers prepare before planting.\n\nLeaders prepare before action.\n\nFamilies prepare before emergencies.\n\nDiscipline creates continuity.\n\nMotivation changes from day to day.\n\nDiscipline carries responsibility forward.\n\nClarity determines priority.\n\nNot every demand deserves equal attention.\n\n\nREFLECTION\n\nI pause and realign.\n\nI check my direction.\n\nI return to my purpose.\n\n\nACTION\n\nI realign my energy.\n\nI recommit to what matters.\n\nI move with discipline.\n\n\nALIGNMENT\n\nI realign with my purpose.\n\nI walk in clarity.\n\nI choose what is next.\n\n\nIdentify one area\nwhere you have drifted.\n\nName it.\n\nChoose one correction.\n\nTake one practical step.\n\nMorning Rise teaches that strength\nis the ability to recognize\nwhen direction has been lost\nand return with discipline.\n`\n\n},\n\n\n\n{\n\nid: 3,\n\ntitle:\n\"Noon\",\n\nsubtitle:\n\"The Faze of Empowerment\",\n\nimage:\n\"11a.png\",\n\nlesson:\n`\nNoon is the phase of empowerment.\n\nThe sun is at its highest point.\n\nThis is the moment of strength,\nresponsibility,\nand decisive action.\n\nEmpowerment is not domination.\n\nEmpowerment is the disciplined use\nof your capacity.\n\nThe first principle is ownership.\n\nTake responsibility\nfor your decisions\nand for what you do next.\n\nThe second principle is courage.\n\nCourage is movement\nin the presence of uncertainty.\n\nYou may not know every outcome,\nbut you can still take\nthe next aligned step.\n\nThe third principle\nis productive power.\n\nReal power creates.\n\nIt builds families.\n\nIt builds businesses.\n\nIt builds farms.\n\nIt builds institutions.\n\nIt builds knowledge.\n\nIt builds art.\n\nIt builds opportunity.\n\nThe fourth principle\nis leadership.\n\nLeadership begins\nwhen your choices become reliable enough\nthat others can trust your example.\n\nLeadership includes preparation,\ncommunication,\ncorrection,\nprotection,\nand service.\n\nThe fifth principle is impact.\n\nEvery person creates impact\nthrough action or inaction.\n\nUnder the Tree and River Covenant,\nauthority exists for service.\n\nKnowledge exists for transmission.\n\nResources exist\nfor responsible stewardship.\n\nLeadership exists\nfor protection and development.\n\n\nREFLECTION\n\nI step fully into my power.\n\nI trust my path.\n\nI embrace my purpose.\n\n\nACTION\n\nI take bold,\naligned action.\n\nI lead with confidence.\n\nI create impact.\n\n\nALIGNMENT\n\nI am aligned with my purpose.\n\nI move in harmony with the Most High.\n\nI walk in truth and power.\n\n\nChoose one meaningful action\nand complete it.\n\nThis is your moment\nto shine,\nlead,\nand create.\n\nWalk boldly.\n\nYou are the light in action.\n`\n\n},\n\n\n\n{\n\nid: 4,\n\ntitle:\n\"Sunset Integration\",\n\nsubtitle:\n\"The Faze of Harmony\",\n\nimage:\n\"11c.jpg\",\n\nlesson:\n`\nSunset Integration\nis the phase of harmony.\n\nAs the sun descends,\nthe question changes.\n\nThe question is no longer only:\n\nWhat will I do?\n\nThe question becomes:\n\nWhat have I learned?\n\nIntegration turns experience\ninto wisdom.\n\nBegin with review.\n\nAsk:\n\nWhat went well?\n\nWhat went poorly?\n\nWhat surprised me?\n\nWhat did I learn?\n\nWhat must change?\n\nThen practice gratitude.\n\nGratitude does not deny difficulty.\n\nIt recognizes value\nwhile remaining truthful\nabout struggle.\n\nNext comes release.\n\nSome burdens,\nhabits,\nconflicts,\nand thoughts\nshould not be carried\ninto another cycle.\n\nThen comes repair.\n\nIf harm was caused,\nprepare to correct it.\n\nIf an apology is owed,\ngive it.\n\nIf a responsibility was missed,\nmake a plan.\n\nFinally comes rest.\n\nRest is part of stewardship.\n\nExhaustion weakens judgment,\npatience,\nhealth,\nand relationships.\n\n\nREFLECTION\n\nI reflect on my day.\n\nI honor my growth.\n\nI release what no longer serves me.\n\n\nACTION\n\nI celebrate progress.\n\nI express gratitude.\n\nI prepare for rest and renewal.\n\n\nALIGNMENT\n\nI am in harmony with my journey.\n\nI trust the process.\n\nI rest in peace.\n\n\nName one thing you appreciate.\n\nName one thing you learned.\n\nName one thing\nyou are ready to release.\n\nGratitude turns experience\ninto wisdom.\n\nIntegrate.\n\nReflect.\n\nRelease.\n\nRest.\n\nRenew.\n`\n\n},\n\n\n\n{\n\nid: 5,\n\ntitle:\n\"Solar Mastery\",\n\nsubtitle:\n\"The Faze of Transcendence\",\n\nimage:\n\"11d.png\",\n\nlesson:\n`\nSolar Mastery\nis the phase of transcendence.\n\nPersonal development\nnow becomes service\nand legacy.\n\nTranscendence means living\nbeyond narrow self-interest.\n\nIt means recognizing\nthat your gifts\nare not only for you.\n\nThe first principle\nis presence.\n\nShow up fully.\n\nBe attentive.\n\nBe reliable.\n\nBe accountable.\n\nThe second principle\nis service.\n\nService transforms ability\ninto contribution.\n\nYou may serve through teaching.\n\nYou may serve through protecting.\n\nYou may serve through building.\n\nYou may serve through farming.\n\nYou may serve through creating.\n\nYou may serve through mentoring.\n\nYou may serve through organizing.\n\nThe third principle\nis legacy.\n\nLegacy is what continues\nafter your immediate action ends.\n\nKnowledge taught to a child\ncan become legacy.\n\nA responsible institution\ncan become legacy.\n\nA family record preserved\ncan become legacy.\n\nThe fourth principle\nis abundance.\n\nAbundance is the capacity\nto create value,\nopportunity,\nknowledge,\nstability,\nand resources\nthat can circulate\nthrough generations.\n\nThe fifth principle\nis transcendence.\n\nYour life belongs\nto a larger story.\n\nYou stand between\nancestors behind you\nand generations ahead of you.\n\n\nREFLECTION\n\nI embrace wholeness.\n\nI live in alignment.\n\nI uplift and inspire.\n\nI leave a legacy of light.\n\n\nACTION\n\nI lead with love.\n\nI serve with purpose.\n\nI create impact\nthat outlives me.\n\n\nALIGNMENT\n\nI am one with purpose.\n\nI walk in truth.\n\nI radiate peace.\n\nI elevate others.\n\n\nIdentify what you are building\nthat can outlive you.\n\nIdentify one person\nyou can strengthen\nwith what you know.\n\nYou are the sun.\n\nYou are the light.\n\nNow you shine for others.\n\nLive your purpose.\n\nLeave your legacy.\n\nTranscend.\n\nInspire.\n\nImpact.\n\nIlluminate.\n`\n\n}\n\n];\n\n\n\n\/*\n=========================================\nSTORAGE\n=========================================\n*\/\n\nconst STORAGE_KEY =\n\"fiveFazesWorkingAudiobookV1\";\n\n\nlet lessons =\n\nJSON.parse(\n\nlocalStorage.getItem(\nSTORAGE_KEY\n)\n\n|| \"null\"\n\n)\n\n||\n\nJSON.parse(\n\nJSON.stringify(\nDEFAULT_LESSONS\n)\n\n);\n\n\n\nlet currentIndex = 0;\n\nlet voices = [];\n\nlet speechQueue = [];\n\nlet speechIndex = 0;\n\nlet isReading = false;\n\nlet playAllMode = false;\n\nlet adminUnlocked = false;\n\n\n\n\/*\n=========================================\nDISPLAY LESSON CARDS\n=========================================\n*\/\n\nfunction renderLessons() {\n\nconst phaseGrid =\ndocument.getElementById(\n\"phaseGrid\"\n);\n\n\nphaseGrid.innerHTML =\n\nlessons.map(\n\n(lesson, index) => `\n\n\n<article class=\"phase\">\n\n<img\nsrc=\"${lesson.image}\"\nalt=\"${lesson.title}\">\n\n\n<div class=\"body\">\n\n\n<h3>\n\n${lesson.id}.\n${lesson.title}\n\n<\/h3>\n\n\n<p>\n\n${lesson.subtitle}\n\n<\/p>\n\n\n<button\nonclick=\"openLesson(${index})\">\n\nOpen Lesson\n\n<\/button>\n\n\n<\/div>\n\n<\/article>\n\n\n`\n\n).join(\"\");\n\n\nrenderCurrentLesson();\n\n}\n\n\n\n\/*\n=========================================\nOPEN LESSON\n=========================================\n*\/\n\nfunction openLesson(index) {\n\nstopSpeech();\n\ncurrentIndex =\nindex;\n\nrenderCurrentLesson();\n\n}\n\n\n\n\/*\n=========================================\nDISPLAY CURRENT LESSON\n=========================================\n*\/\n\nfunction renderCurrentLesson() {\n\nconst lesson =\nlessons[currentIndex];\n\n\ndocument.getElementById(\n\"mainImage\"\n).src =\nlesson.image;\n\n\ndocument.getElementById(\n\"mainTitle\"\n).textContent =\n\nlesson.id +\n\". \" +\nlesson.title;\n\n\ndocument.getElementById(\n\"mainSubtitle\"\n).textContent =\n\nlesson.subtitle;\n\n\ndocument.getElementById(\n\"lessonText\"\n).textContent =\n\nlesson.lesson;\n\n}\n\n\n\n\/*\n=========================================\nLOAD BROWSER VOICES\n=========================================\n*\/\n\nfunction loadVoices() {\n\nvoices =\n\nspeechSynthesis\n.getVoices();\n\n\nconst voiceSelect =\n\ndocument.getElementById(\n\"voiceSelect\"\n);\n\n\nvoiceSelect.innerHTML =\n\"\";\n\n\nif (!voices.length) {\n\nconst option =\ndocument.createElement(\n\"option\"\n);\n\noption.textContent =\n\"Default Browser Voice\";\n\nvoiceSelect.appendChild(\noption\n);\n\nreturn;\n\n}\n\n\nvoices.forEach(\n\n(voice, index) => {\n\nconst option =\ndocument.createElement(\n\"option\"\n);\n\n\noption.value =\nindex;\n\n\noption.textContent =\n\nvoice.name +\n\" (\" +\nvoice.lang +\n\")\";\n\n\nvoiceSelect.appendChild(\noption\n);\n\n}\n\n);\n\n}\n\n\nspeechSynthesis.onvoiceschanged =\nloadVoices;\n\n\nloadVoices();\n\n\n\n\/*\n=========================================\nBREAK LONG AUDIO INTO SMALL SECTIONS\n=========================================\n*\/\n\nfunction chunkText(\ntext,\nmaxLength = 700\n) {\n\nconst sentences =\n\ntext.match(\n\n\/[^.!?]+[.!?]+|[^.!?]+$\/g\n\n)\n\n|| [text];\n\n\nconst chunks = [];\n\nlet buffer = \"\";\n\n\nsentences.forEach(\n\nsentence => {\n\nif (\n\n(\nbuffer +\n\" \" +\nsentence\n).length\n\n>\n\nmaxLength\n\n) {\n\nif (\nbuffer.trim()\n) {\n\nchunks.push(\nbuffer.trim()\n);\n\n}\n\nbuffer =\nsentence;\n\n}\n\nelse {\n\nbuffer +=\n\" \" +\nsentence;\n\n}\n\n}\n\n);\n\n\nif (\nbuffer.trim()\n) {\n\nchunks.push(\nbuffer.trim()\n);\n\n}\n\n\nreturn chunks;\n\n}\n\n\n\n\/*\n=========================================\nPLAY CURRENT LESSON\n=========================================\n*\/\n\nfunction playLesson() {\n\nspeechSynthesis.cancel();\n\n\nconst lesson =\nlessons[currentIndex];\n\n\nspeechQueue =\n\nchunkText(\n\nlesson.title +\n\". \" +\n\nlesson.subtitle +\n\". \" +\n\nlesson.lesson\n\n);\n\n\nspeechIndex = 0;\n\nisReading = true;\n\nplayAllMode = false;\n\n\nspeakNext();\n\n}\n\n\n\n\/*\n=========================================\nPLAY ALL FIVE LESSONS\n=========================================\n*\/\n\nfunction playAllLessons() {\n\nspeechSynthesis.cancel();\n\n\ncurrentIndex = 0;\n\nplayAllMode = true;\n\nstartCurrentLessonForPlayAll();\n\n}\n\n\n\nfunction startCurrentLessonForPlayAll() {\n\nrenderCurrentLesson();\n\n\nconst lesson =\nlessons[currentIndex];\n\n\nspeechQueue =\n\nchunkText(\n\nlesson.title +\n\". \" +\n\nlesson.subtitle +\n\". \" +\n\nlesson.lesson\n\n);\n\n\nspeechIndex = 0;\n\nisReading = true;\n\n\nspeakNext();\n\n}\n\n\n\n\/*\n=========================================\nSPEAK NEXT AUDIO CHUNK\n=========================================\n*\/\n\nfunction speakNext() {\n\nif (!isReading) {\n\nreturn;\n\n}\n\n\nif (\n\nspeechIndex >=\nspeechQueue.length\n\n) {\n\n\nif (\n\nplayAllMode\n\n&&\n\ncurrentIndex <\nlessons.length - 1\n\n) {\n\n\ncurrentIndex++;\n\n\nsetTimeout(\n\nstartCurrentLessonForPlayAll,\n\n500\n\n);\n\n\nreturn;\n\n}\n\n\nisReading = false;\n\nplayAllMode = false;\n\n\ndocument.getElementById(\n\"status\"\n).textContent =\n\n\"Lesson complete.\";\n\n\nreturn;\n\n}\n\n\n\nconst utterance =\n\nnew SpeechSynthesisUtterance(\n\nspeechQueue[\nspeechIndex\n]\n\n);\n\n\n\nconst selectedVoiceIndex =\n\nNumber(\n\ndocument.getElementById(\n\"voiceSelect\"\n).value\n\n);\n\n\nif (\n\nvoices[\nselectedVoiceIndex\n]\n\n) {\n\nutterance.voice =\n\nvoices[\nselectedVoiceIndex\n];\n\n}\n\n\n\nutterance.rate =\n\nNumber(\n\ndocument.getElementById(\n\"rateSelect\"\n).value\n\n);\n\n\nutterance.pitch = 1;\n\nutterance.volume = 1;\n\n\n\nutterance.onstart =\n\nfunction() {\n\ndocument.getElementById(\n\"status\"\n).textContent =\n\n\"Reading lesson \" +\n\n(currentIndex + 1) +\n\n\" \u2014 section \" +\n\n(speechIndex + 1) +\n\n\" of \" +\n\nspeechQueue.length;\n\n};\n\n\n\nutterance.onend =\n\nfunction() {\n\nspeechIndex++;\n\nsetTimeout(\nspeakNext,\n100\n);\n\n};\n\n\n\nutterance.onerror =\n\nfunction(event) {\n\nisReading =\nfalse;\n\nplayAllMode =\nfalse;\n\n\ndocument.getElementById(\n\"status\"\n).textContent =\n\n\"Audio playback error. \" +\n\n\"Try opening the page in Chrome or Microsoft Edge.\";\n\n};\n\n\n\nspeechSynthesis.speak(\nutterance\n);\n\n}\n\n\n\n\/*\n=========================================\nAUDIO CONTROLS\n=========================================\n*\/\n\ndocument.getElementById(\n\"playBtn\"\n)\n\n.addEventListener(\n\n\"click\",\nplayLesson\n\n);\n\n\n\ndocument.getElementById(\n\"playAllBtn\"\n)\n\n.addEventListener(\n\n\"click\",\nplayAllLessons\n\n);\n\n\n\ndocument.getElementById(\n\"pauseBtn\"\n)\n\n.addEventListener(\n\n\"click\",\n\nfunction() {\n\nspeechSynthesis.pause();\n\n\ndocument.getElementById(\n\"status\"\n).textContent =\n\n\"Paused.\";\n\n}\n\n);\n\n\n\ndocument.getElementById(\n\"resumeBtn\"\n)\n\n.addEventListener(\n\n\"click\",\n\nfunction() {\n\nspeechSynthesis.resume();\n\n\ndocument.getElementById(\n\"status\"\n).textContent =\n\n\"Resumed.\";\n\n}\n\n);\n\n\n\ndocument.getElementById(\n\"stopBtn\"\n)\n\n.addEventListener(\n\n\"click\",\nstopSpeech\n\n);\n\n\n\nfunction stopSpeech() {\n\nspeechSynthesis.cancel();\n\nisReading =\nfalse;\n\nplayAllMode =\nfalse;\n\nspeechQueue =\n[];\n\nspeechIndex =\n0;\n\n\ndocument.getElementById(\n\"status\"\n).textContent =\n\n\"Stopped.\";\n\n}\n\n\n\n\/*\n=========================================\nADMIN LOGIN\n=========================================\n*\/\n\ndocument.getElementById(\n\"adminLoginBtn\"\n)\n\n.addEventListener(\n\n\"click\",\n\nfunction() {\n\n\nconst username =\n\ndocument.getElementById(\n\"adminUser\"\n).value.trim();\n\n\nconst password =\n\ndocument.getElementById(\n\"adminPass\"\n).value;\n\n\n\nif (\n\nusername !==\nADMIN_USERNAME\n\n||\n\npassword !==\nADMIN_PASSWORD\n\n) {\n\nalert(\n\"Invalid username or password.\"\n);\n\nreturn;\n\n}\n\n\nadminUnlocked =\ntrue;\n\n\ndocument.getElementById(\n\"loginArea\"\n)\n\n.classList.add(\n\"hidden\"\n);\n\n\ndocument.getElementById(\n\"adminEditor\"\n)\n\n.classList.remove(\n\"hidden\"\n);\n\n\nrenderAdminEditor();\n\n}\n\n);\n\n\n\n\/*\n=========================================\nADMIN EDITOR\n=========================================\n*\/\n\nfunction renderAdminEditor() {\n\nconst adminGrid =\n\ndocument.getElementById(\n\"adminGrid\"\n);\n\n\nadminGrid.innerHTML =\n\nlessons.map(\n\n(lesson, index) => `\n\n\n<div class=\"admin-card\">\n\n\n<h3>\n\nLesson\n${lesson.id}\n\n<\/h3>\n\n\n<img\n\nid=\"adminPreview${index}\"\n\nsrc=\"${lesson.image}\"\n\nalt=\"${lesson.title}\">\n\n\n<label>\nLesson Title\n<\/label>\n\n\n<input\n\nid=\"editTitle${index}\"\n\nvalue=\"${lesson.title}\">\n\n\n<label>\nLesson Subtitle\n<\/label>\n\n\n<input\n\nid=\"editSubtitle${index}\"\n\nvalue=\"${lesson.subtitle}\">\n\n\n<label>\nFull Lesson Text\n<\/label>\n\n\n<textarea\n\nid=\"editLesson${index}\"\n\nrows=\"16\">\n\n${lesson.lesson}\n\n<\/textarea>\n\n\n<label>\nReplace Picture With URL\n<\/label>\n\n\n<input\n\nid=\"editImageUrl${index}\"\n\nplaceholder=\"https:\/\/example.com\/image.jpg\">\n\n\n<button\n\nonclick=\"useImageUrl(${index})\">\n\nUse Picture URL\n\n<\/button>\n\n\n<label>\nOr Upload Replacement Picture\n<\/label>\n\n\n<input\n\ntype=\"file\"\n\naccept=\"image\/*\"\n\nonchange=\"uploadImage(event, ${index})\">\n\n\n<\/div>\n\n\n`\n\n).join(\"\");\n\n}\n\n\n\n\/*\n=========================================\nCHANGE PICTURE BY URL\n=========================================\n*\/\n\nfunction useImageUrl(\nindex\n) {\n\nconst url =\n\ndocument.getElementById(\n\n\"editImageUrl\" +\nindex\n\n).value.trim();\n\n\nif (!url) {\n\nalert(\n\"Enter an image URL.\"\n);\n\nreturn;\n\n}\n\n\nlessons[index].image =\nurl;\n\n\ndocument.getElementById(\n\n\"adminPreview\" +\nindex\n\n).src =\nurl;\n\n}\n\n\n\n\/*\n=========================================\nUPLOAD NEW PICTURE\n=========================================\n*\/\n\nfunction uploadImage(\nevent,\nindex\n) {\n\nconst file =\n\nevent.target.files[0];\n\n\nif (!file) {\n\nreturn;\n\n}\n\n\nconst reader =\n\nnew FileReader();\n\n\nreader.onload =\n\nfunction(event) {\n\n\nlessons[index].image =\n\nevent.target.result;\n\n\ndocument.getElementById(\n\n\"adminPreview\" +\nindex\n\n).src =\n\nevent.target.result;\n\n\n};\n\n\nreader.readAsDataURL(\nfile\n);\n\n}\n\n\n\n\/*\n=========================================\nSAVE ADMIN CHANGES\n=========================================\n*\/\n\ndocument.getElementById(\n\"saveAdminBtn\"\n)\n\n.addEventListener(\n\n\"click\",\n\nfunction() {\n\n\nlessons.forEach(\n\n(lesson, index) => {\n\n\nlesson.title =\n\ndocument.getElementById(\n\n\"editTitle\" +\nindex\n\n).value.trim();\n\n\n\nlesson.subtitle =\n\ndocument.getElementById(\n\n\"editSubtitle\" +\nindex\n\n).value.trim();\n\n\n\nlesson.lesson =\n\ndocument.getElementById(\n\n\"editLesson\" +\nindex\n\n).value;\n\n\n}\n\n);\n\n\n\nlocalStorage.setItem(\n\nSTORAGE_KEY,\n\nJSON.stringify(\nlessons\n)\n\n);\n\n\n\nrenderLessons();\n\nrenderAdminEditor();\n\n\nalert(\n\n\"All lesson changes have been saved.\"\n\n);\n\n\n}\n\n);\n\n\n\n\/*\n=========================================\nRESET ORIGINAL LESSONS\n=========================================\n*\/\n\ndocument.getElementById(\n\"resetAdminBtn\"\n)\n\n.addEventListener(\n\n\"click\",\n\nfunction() {\n\n\nif (\n\n!confirm(\n\n\"Reset all lessons and pictures to the original version?\"\n\n)\n\n) {\n\nreturn;\n\n}\n\n\nlessons =\n\nJSON.parse(\n\nJSON.stringify(\n\nDEFAULT_LESSONS\n\n)\n\n);\n\n\nlocalStorage.removeItem(\nSTORAGE_KEY\n);\n\n\ncurrentIndex =\n0;\n\n\nrenderLessons();\n\nrenderAdminEditor();\n\n\n}\n\n);\n\n\n\n\/*\n=========================================\nADMIN LOGOUT\n=========================================\n*\/\n\ndocument.getElementById(\n\"logoutAdminBtn\"\n)\n\n.addEventListener(\n\n\"click\",\n\nfunction() {\n\n\nadminUnlocked =\nfalse;\n\n\ndocument.getElementById(\n\"adminEditor\"\n)\n\n.classList.add(\n\"hidden\"\n);\n\n\ndocument.getElementById(\n\"loginArea\"\n)\n\n.classList.remove(\n\"hidden\"\n);\n\n\n}\n\n);\n\n\n\n\/*\n=========================================\nSTART PAGE\n=========================================\n*\/\n\nrenderLessons();\n\n\n<\/script>\n\n\n<\/body>\n\n<\/html>\n\n\n\n\n\nYouth Mentorship\n\n\n!step-01\nStep 1: Engagement\nConnect with our community through introductory sessions to understand our mission and offerings.\n!step-02\nStep 2: Enrollment\nChoose the program that best suits your needs and enroll to begin your journey toward growth.\n!step-03\nStep 3: Participation\nEngage actively in programs, workshops, and events designed for transformation and community building.\n\n\n\n\n\n\n\n\nKey Features\n\n\nLearn about the unique aspects of our offerings designed to nurture growth, resilience, and community engagement.\n\n\n\nHolistic Approach\nOur services embrace a holistic approach, integrating spiritual, emotional, and practical aspects of personal and community development.\n\n\nCommunity Focused\nWe prioritize community-driven initiatives that empower individuals and foster collective responsibility towards a sustainable future.\n\n\nCultural Heritage\nWe focus on the preservation and promotion of cultural heritage to strengthen community identity and continuity across generations.\n\n\n\n\n\n\n\n\nOur programs aim to create transformative experiences that align personal development with community enrichment.\n\n\n\n\n\n\nEncouraging personal accountability is at the core of our mission, helping individuals take ownership of their growth and responsibilities.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-61","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/pages\/61","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/comments?post=61"}],"version-history":[{"count":32,"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/pages\/61\/revisions"}],"predecessor-version":[{"id":169,"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/pages\/61\/revisions\/169"}],"wp:attachment":[{"href":"https:\/\/trubianvillage.com\/vangu\/wp-json\/wp\/v2\/media?parent=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}