import argv import gleam/int import gleam/bit_array import gleam/bytes_tree import gleam/dynamic.{type Dynamic} import gleam/erlang/process import gleam/http/request.{type Request} import gleam/http/response import gleam/io import gleam/dict import gleam/list import gleam/result import gleam/string import mist.{type ResponseData} import ai_tutor import page_content import ui_builder const app_version = "4.0.2" pub fn main() { case argv.load().arguments { [] -> start_server() ["serve"] -> start_server() _ -> io.println("Usage: gleam run serve") } } fn start_server() { let port = 7860 io.println("FlashSync " <> app_version <> " booting on all interfaces at port " <> int.to_string(port)) let assert Ok(_) = mist.new(handle_request) |> mist.bind("0.0.0.0") // Change: Listen on all interfaces |> mist.port(port) // Change: Use port 8080 |> mist.start process.sleep_forever() } fn handle_request(req: Request(mist.Connection)) -> response.Response(ResponseData) { case request.path_segments(req) { ["static", "app.js"] -> serve_static_js() [] -> render_page("hub") ["auth"] -> render_page("auth") ["hub"] -> render_page("hub") ["flashcards"] -> render_page("flashcards") ["flashcards", "new"] -> render_page("flashcards-new") ["flashcards", "import"] -> render_page("flashcards-import") ["flashcards", "export"] -> render_page("flashcards-export") ["flashcards", "print"] -> render_page("flashcards-print") ["flashcards", "biology"] -> render_page("flashcards-biology") ["flashcards", "chemistry"] -> render_page("flashcards-chemistry") ["tutor"] -> render_page("tutor") ["education"] -> render_page("education") ["education", "process"] -> render_page("education-process") ["ai-solver"] -> render_page("ai-solver") ["study-tools"] -> render_page("study-tools") ["heatmap"] -> render_page("heatmap") ["biometric"] -> render_page("biometric") ["exams"] -> render_page("exam") ["exams", "biology"] -> render_page("exam-biology") ["exams", "chemistry"] -> render_page("exam-chemistry") ["timetravel"] -> render_page("timetravel") ["analytics"] -> render_page("analytics") ["predictor"] -> render_page("predictor") ["solver"] -> render_page("solver") ["suggestions"] -> render_page("suggestions") ["profile"] -> render_page("profile") ["settings"] -> render_page("settings") ["achievements"] -> render_page("achievements") ["calendar"] -> render_page("calendar") ["notes"] -> render_page("notes") ["vocabulary"] -> render_page("vocabulary") ["pomodoro"] -> render_page("pomodoro") ["formulas"] -> render_page("formulas") ["api", "health"] -> json_response("{\"status\":\"ok\",\"app\":\"FlashSync\",\"version\":\"" <> app_version <> "\"}") ["api", "dashboard"] -> json_response("{\"mastery\":92,\"focus_minutes\":156,\"cards_mastered\":312,\"retention\":95,\"streak\":21}") ["api", "mission", "daily"] -> json_response("{\"title\":\"Deep Focus Sprint\",\"blocks\":[\"25m concept review\",\"15m active recall\",\"10m exam drill\"],\"power_score\":98}") ["api", "exam", "quick"] -> json_response("{\"exam_id\":\"QX-2026\",\"subject\":\"Integrated Science\",\"questions\":20,\"duration_minutes\":25}") ["api", "tutor"] -> handle_tutor_request(req) ["api", "solver"] -> handle_solver_request(req) ["api", "ai-solver"] -> handle_ai_solver_request(req) ["api", "study-tools"] -> handle_study_tools_request(req) ["api", "youtube", "process"] -> handle_youtube_process_request(req) _ -> render_page("404") } } @external(erlang, "file", "read_file") fn read_file(_path: String) -> Result(BitArray, Dynamic) { panic as "read_file is only available on Erlang" } fn serve_static_js() -> response.Response(ResponseData) { let js = case read_file("priv/static/app.js") { Ok(content) -> bit_array.to_string(content) |> result.unwrap("") _ -> app_js_content() } response.new(200) |> response.set_header("content-type", "application/javascript; charset=utf-8") |> response.set_header("cache-control", "no-store") |> response.set_body(mist.Bytes(bytes_tree.from_string(js))) } fn app_js_content() -> String { app_js_part1() <> app_js_part2() <> app_js_part3() <> app_js_part4() <> app_js_part5() } fn app_js_part1() -> String { "var LS=localStorage;var FS=JSON.parse(LS.getItem('fs')||'null')||{decks:[],cards:[],notes:[],vocab:[],deckOrder:[],stats:{cs:0,sc:0,tt:0,sk:0},pr:1500,prR:false,prT:null,sq:[],si:0,ss:0,st:0,exS:null,vi:0,exR:[],solH:[],lang:'en',theme:'dark',au:false,mi:0,profilePic:null,currentStudy:null,pomodoro:null,examResults:[],musicPlaying:false,studyPlans:[],calendarEvents:[],achievements:{},currentMonth:new Date().getMonth(),currentYear:new Date().getFullYear(),totalCardsCreated:0,totalExamsPassed:0,totalStudyMinutes:0,lastStudyDate:null,studyStreak:0,flashcardsCreated:0};function sv(){try{LS.setItem('fs',JSON.stringify(FS))}catch(e){}} function showToast(m,t){var e=document.getElementById('toast');if(!e)return;e.textContent=m;e.className='toast show '+(t||'');clearTimeout(e._h);e._h=setTimeout(function(){e.classList.remove('show')},3500);} function closeModal(e){if(e&&e.target!==document.getElementById('modalOverlay'))return;document.getElementById('modalOverlay').classList.remove('show');} function openModal(t,h){document.getElementById('modalOverlay').classList.add('show');document.getElementById('modalTitle').textContent=t;document.getElementById('modalBody').innerHTML=h;} function escapeHtml(t){var d=document.createElement('div');d.textContent=t;return d.innerHTML;} function confetti(){var c=document.createElement('div');c.className='confetti';document.body.appendChild(c);for(var i=0;i<40;i++){var p=document.createElement('div');p.className='confetti-piece';p.style.left=Math.random()*100+'%';p.style.background=['#00f2ff','#bc13fe','#ff006e','#00ff00','#ffaa00','#fff'][~~(Math.random()*6)];p.style.animationDuration=(Math.random()*2+2)+'s';c.appendChild(p);}setTimeout(function(){c.remove()},4000);} function trackAction(a){if(a=='card_created'){FS.flashcardsCreated=(FS.flashcardsCreated||0)+1;FS.totalCardsCreated=(FS.totalCardsCreated||0)+1;}if(a=='exam_passed'){FS.totalExamsPassed=(FS.totalExamsPassed||0)+1;}if(a=='study_minute'){FS.totalStudyMinutes=(FS.totalStudyMinutes||0)+1;}if(a=='study_session'){var t=new Date().toDateString();if(FS.lastStudyDate!=t){FS.lastStudyDate=t;FS.studyStreak=(FS.studyStreak||0)+1;}}updateAchievements();sv();} function updateAchievements(){var a=FS.achievements||{};if(FS.totalCardsCreated>=1)a.firstCard=true;if(FS.totalCardsCreated>=50)a.brainiac=true;if(FS.studyStreak>=7)a.onFire=true;if(FS.totalExamsPassed>=1)a.firstExam=true;if(FS.totalExamsPassed>=10)a.examMaster=true;if(FS.totalStudyMinutes>=6000)a.scholar=true;if(FS.totalStudyMinutes>=600)a.dedicated=true;FS.achievements=a;sv();} function login(){var n=document.getElementById('user');FS.stats.cs++;sv();showToast('Welcome '+(n?n.value:'Student')+'!','success');setTimeout(function(){location.href='/hub'},500);} function addDeck(){var f=document.getElementById('newDeckName'),n=f&&f.value.trim();if(!n){showToast('Enter a deck name!','error');return;}FS.decks.push({id:Date.now()+'',name:n,cc:0,ca:new Date().toISOString(),my:0});sv();confetti();showToast('Deck '+n+' created!','success');setTimeout(function(){location.href='/flashcards?refresh='+Date.now()},600);} function openDeck(t){if(t==='biology'||t==='chemistry'){location.href='/flashcards/'+t;}else{location.href='/flashcards?deck='+encodeURIComponent(t);}} function exportPDF(){if(!FS.cards.length){showToast('No cards to export!','error');return;}var h='

FlashSync Cards

';for(var i=0;i'+(i+1)+'. '+escapeHtml(c.question)+'
'+escapeHtml(c.answer||'')+'';}h+='';var b=new Blob([h],{type:'text/html'});var l=document.createElement('a');l.href=URL.createObjectURL(b);l.download='cards.html';l.click();URL.revokeObjectURL(l.href);confetti();showToast('Exported!','success');} function preparePrintMode(){exportPDF();showToast('Print pack ready!','success');} function importCards(){var i=document.createElement('input');i.type='file';i.accept='.json,.csv,.txt';i.onchange=function(e){var f=e.target.files[0];if(!f)return;var r=new FileReader();r.onload=function(ev){try{var d=JSON.parse(ev.target.result);if(d&&d.cards){if(Array.isArray(d.cards))FS.cards=FS.cards.concat(d.cards);if(d.decks)FS.decks=FS.decks.concat(d.decks);sv();confetti();showToast('Imported!','success');setTimeout(function(){location.reload()},800);return;}}catch(e){}var txt=ev.target.result,lines=txt.split(/\\r?\\n/),c=0;for(var i=0;i=2){FS.cards.push({id:Date.now()+'-'+i,question:p[0].trim(),answer:p.slice(1).join(',').trim(),deckId:'imp',ca:new Date().toISOString(),my:0});c++;}}if(c>0){sv();confetti();showToast('Imported '+c+' cards!','success');setTimeout(function(){location.reload()},800);}else showToast('Could not parse file','error');};r.readAsText(f);};i.click();} function studyDeckByTopic(t){var deck=FS.decks.find(function(d){return d.id===t||d.name.toLowerCase().includes(t.toLowerCase());});if(deck){FS.currentStudy={deckId:t,cards:FS.cards.filter(function(c){return c.deckId===t;}),index:0,mode:'study'};sv();openModal('Study: '+t,'

Study Mode

Cards: '+FS.currentStudy.cards.length+'

');}else showToast('Deck not found!','error');} function reviewDeckByTopic(t){var deck=FS.decks.find(function(d){return d.id===t||d.name.toLowerCase().includes(t.toLowerCase());});if(deck){FS.currentStudy={deckId:t,cards:FS.cards.filter(function(c){return c.deckId===t;}),index:0,mode:'review'};sv();openModal('Review: '+t,'

Review Mode

Cards: '+FS.currentStudy.cards.length+'

');}else showToast('Deck not found!','error');} function startStudySession(){if(!FS.currentStudy||!FS.currentStudy.cards.length){showToast('No cards!','error');return;}var c=FS.currentStudy.cards[FS.currentStudy.index];var h='

Q:

'+escapeHtml(c.question)+'

'+(FS.currentStudy.index+1)+'/'+FS.currentStudy.cards.length+'
';openModal('Study',h);} function showAnswer(id){var b=document.getElementById('abox');if(b)b.style.display='block';} function rateCard(q,id){var c=FS.cards.find(function(c){return c.id===id;});if(c){c.my=q;sv();showToast('Rated!','success');nextCard();}} function nextCard(){if(FS.currentStudy.index0){FS.currentStudy.index--;sv();startStudySession();}} function startReviewSession(){if(!FS.currentStudy||!FS.currentStudy.cards.length){showToast('No cards!','error');return;}var d=FS.currentStudy.cards.filter(function(c){return c.my<3;});if(!d.length){showToast('All reviewed!','success');return;}FS.currentStudy.cards=d;FS.currentStudy.index=0;startStudySession();}" } fn app_js_part2() -> String { "var audioCtx=null;var ambAudio=null;function getAudioCtx(){if(!audioCtx)audioCtx=new(window.AudioContext||window.webkitAudioContext)();return audioCtx;} var tracks=[{n:'Lo-Fi',f:261.63,t:'sine'},{n:'Classical',f:330,t:'triangle'},{n:'Nature',f:392,t:'sine'},{n:'Acoustic',f:440,t:'triangle'},{n:'Piano',f:523.25,t:'triangle'},{n:'Jazz',f:293.66,t:'sawtooth'},{n:'Electronic',f:349.23,t:'square'}];var curTr=0,musInt=null,noteInt=null; function toggleMusic(){var b=document.querySelector('.music-btn')||document.getElementById('musicBtn');if(FS.musicPlaying){stopMusic();if(b){b.innerHTML=' Play Music';b.className='premium-button compact-btn music-btn';}showToast('Paused','error');}else{startMusic();if(b){b.innerHTML=' Playing: '+tracks[curTr].n;b.className='accent-button compact-btn music-btn';}showToast('Playing: '+tracks[curTr].n,'success');FS.stats.mi=(FS.stats.mi||0)+1;sv();}} function startMusic(){FS.musicPlaying=true;sv();playNote();if(musInt)clearInterval(musInt);musInt=setInterval(function(){if(!FS.musicPlaying){clearInterval(musInt);return;}curTr=(curTr+1)%tracks.length;var b=document.querySelector('.music-btn')||document.getElementById('musicBtn');if(b)b.innerHTML=' Playing: '+tracks[curTr].n;showToast('Playing: '+tracks[curTr].n,'success');},20000+Math.random()*15000);} function playNote(){try{var ctx=getAudioCtx();if(noteInt){clearTimeout(noteInt);noteInt=null;}var pn=function(){if(!FS.musicPlaying)return;var o=ctx.createOscillator();var g=ctx.createGain();o.type=tracks[curTr].t;o.frequency.setValueAtTime(tracks[curTr].f*(0.5+Math.random()*0.5),ctx.currentTime);g.gain.setValueAtTime(0.08,ctx.currentTime);g.gain.exponentialRampToValueAtTime(0.001,ctx.currentTime+0.3);o.connect(g);g.connect(ctx.destination);o.start();o.stop(ctx.currentTime+0.3);};pn();noteInt=setInterval(function(){if(!FS.musicPlaying){clearInterval(noteInt);return;}pn();},400);}catch(e){showToast('Click to enable audio','error');}} function stopMusic(){FS.musicPlaying=false;sv();if(noteInt){clearInterval(noteInt);noteInt=null;}if(musInt){clearInterval(musInt);musInt=null;}} function playAmbientMusic(){try{if(ambAudio){ambAudio.pause();ambAudio=null;}ambAudio=new Audio('/static/ambient.mp3');ambAudio.loop=true;ambAudio.volume=0.3;ambAudio.play().then(function(){showToast('Ambient music playing!','success');}).catch(function(){showToast('Click to enable audio','error');});}catch(e){showToast('Audio error','error');}} function stopAmbientMusic(){if(ambAudio){ambAudio.pause();ambAudio.currentTime=0;ambAudio=null;}} function toggleAmbientMusic(){var b=document.getElementById('ambientBtn');if(ambAudio&&!ambAudio.paused){stopAmbientMusic();if(b)b.innerHTML=' Play Ambient';showToast('Ambient stopped','error');}else{playAmbientMusic();if(b)b.innerHTML=' Playing Ambient';}} function playBeep(){try{var ctx=getAudioCtx();var o=ctx.createOscillator();var g=ctx.createGain();o.type='sine';o.frequency.setValueAtTime(880,ctx.currentTime);g.gain.setValueAtTime(0.3,ctx.currentTime);g.gain.exponentialRampToValueAtTime(0.001,ctx.currentTime+0.5);o.connect(g);g.connect(ctx.destination);o.start();o.stop(ctx.currentTime+0.5);}catch(e){}} function checkAchievements(type,value){var a=FS.achievements||{};if(type=='cards'&&FS.flashcardsCreated>=1&&!a.firstCard){a.firstCard=true;showToast('Achievement: First Card!','success');confetti();}if(type=='cards'&&FS.flashcardsCreated>=50&&!a.brainiac){a.brainiac=true;showToast('Achievement: Brainiac!','success');confetti();}if(type=='streak'&&FS.studyStreak>=7&&!a.onFire){a.onFire=true;showToast('Achievement: On Fire!','success');confetti();}if(type=='exam'&&FS.totalExamsPassed>=1&&!a.firstExam){a.firstExam=true;showToast('Achievement: First Exam!','success');confetti();}if(type=='exam'&&FS.totalExamsPassed>=10&&!a.examMaster){a.examMaster=true;showToast('Achievement: Exam Master!','success');confetti();}if(type=='minutes'&&FS.totalStudyMinutes>=600&&!a.dedicated){a.dedicated=true;showToast('Achievement: Dedicated!','success');confetti();}if(type=='minutes'&&FS.totalStudyMinutes>=6000&&!a.scholar){a.scholar=true;showToast('Achievement: Scholar!','success');confetti();}FS.achievements=a;sv();} async function sendTutorMessage(){var inp=document.getElementById('tutorInput'),msg=document.getElementById('chatMessages');if(!inp||!msg)return;var q=inp.value.trim();if(!q)return;inp.value='';var u=document.createElement('div');u.className='message user';u.innerHTML='You:
'+escapeHtml(q)+'
';msg.appendChild(u);msg.scrollTop=msg.scrollHeight;var a=document.createElement('div');a.className='message ai';a.innerHTML='AI:
';msg.appendChild(a);msg.scrollTop=msg.scrollHeight;try{var r=await fetch('/api/tutor?q='+encodeURIComponent(q),{headers:{accept:'text/html'}});if(!r.ok)throw Error();a.innerHTML='AI:
'+await r.text()+'
';}catch(e){a.innerHTML='AI:
'+localResp(q)+'
';}msg.scrollTop=msg.scrollHeight;} function askTutor(q){var inp=document.getElementById('tutorInput');if(inp){inp.value=q;sendTutorMessage行业;}else location.href='/tutor?q='+encodeURIComponent(q);} function clearChat(){var m=document.getElementById('chatMessages');if(m){m.innerHTML='
AI: Cleared!
';showToast('Cleared','success');}} function localResp(q){q=q.toLowerCase();if(q.includes('photo'))return'

Photosynthesis: Plants convert light to glucose.

';if(q.includes('mito')||q.includes('cell'))return'

Cell Bio: Mitochondria make ATP.

';if(q.includes('quantum'))return'

Quantum: Multiple states until measured.

';if(q.includes('newton')||q.includes('force'))return'

Newton: F=ma, inertia, action-reaction.

';if(q.includes('exam')||q.includes('tip'))return'

Tips: Active recall, spaced repetition.

';if(q.includes('what')||q.includes('define')){var t=q.replace(/what|define|explain/g,'').trim()||'this';return'

About '+t+': Focus on definitions.

';}return'

Break into parts. Connect concepts.

';} function generateSolution(p){var l=p.toLowerCase(),s='

Solution

Problem: '+escapeHtml(p)+'

';if(l.includes('=')||l.includes('solve')||l.includes('calc')){s+='

1. Identify knowns
2. Choose formula
3. Substitute
4. Solve
5. Verify

';}else if(l.includes('what')||l.includes('define')){s+='

Break down fundamentals, define clearly.

';}else{s+='

1. Identify concepts
2. Break into parts
3. Apply principles

';}return s;} async function solveProblem(){var f=document.getElementById('problemText'),r=document.getElementById('solverResult');var q=f?f.value.trim():'';if(!q||!r){showToast('Enter a problem!','error');return;}r.style.display='block';r.innerHTML='

Analyzing...

';try{var resp=await fetch('/api/solver?q='+encodeURIComponent(q),{headers:{accept:'text/html'}});if(!resp.ok)throw Error();r.innerHTML=await resp.text();FS.solH.push({p:q,s:'Server',d:new Date().toISOString()});sv();confetti();}catch(e){r.innerHTML=generateSolution(q);FS.solH.push({p:q,s:'Local',d:new Date().toISOString()});sv();confetti();}} function handleFileUpload(){var f=document.getElementById('problemFile');if(!f||!f.files||!f.files[0])return;var img=document.getElementById('previewImg'),prev=document.getElementById('imagePreview');if(img&&prev){var r=new FileReader();r.onload=function(e){img.src=e.target.result;prev.style.display='block';showToast('Loaded!','success');};r.readAsDataURL(f.files[0]);}} function solveFromImage(){var img=document.getElementById('previewImg');if(!img||!img.src||img.src===''){showToast('Upload an image first!','error');return;}var r=document.getElementById('solverResult');if(!r){showToast('Not found','error');return;}r.style.display='block';r.innerHTML='

Extracting text from image...

';setTimeout(function(){var steps='

Solution from Image

Step 1: Image analyzed

Step 2: Text extracted via OCR

Step 3: Problem solved

Answer: Based on the uploaded image content, the solution has been computed.
';r.innerHTML=steps;FS.solH.push({p:'Image solved',s:'Local',d:new Date().toISOString()});sv();confetti();showToast('Solved from image!','success');},2000);} function createFlashcard(q,a){a=a||'';if(!q||q===''){showToast('No question text!','error');return;}FS.cards.push({id:Date.now()+'',question:q,answer:a,deckId:'study',ca:new Date().toISOString(),my:0});FS.flashcardsCreated=(FS.flashcardsCreated||0)+1;FS.totalCardsCreated=(FS.totalCardsCreated||0)+1;sv();confetti();showToast('Flashcard created: '+q.substring(0,30)+'...','success');trackAction('card_created');checkAchievements('cards');} function generateStudyQuestions(){var t=document.getElementById('studyTopic'),topic=t?t.value.trim()||'General':'General';var o=document.getElementById('studyGenerated');if(!o)return;o.style.display='block';o.innerHTML='

Generating...

';setTimeout(function(){var qs=['Define '+topic,'How does '+topic+' work?','Application of '+topic,'Compare '+topic,'Why is '+topic+' important?'];var html='

Questions for: '+escapeHtml(topic)+'

';for(var i=0;i

Q'+(i+1)+': '+qtext+'

';}o.innerHTML=html;confetti();showToast('Questions generated!','success');},1000);} function startExam(subject){FS.currentExam={subject:subject,startTime:Date.now(),questions:[],answers:[]};showToast('Exam started: '+subject,'success');openModal('Exam: '+subject,'

'+subject+' Started!

Good luck!

Time: 45:00

');} function submitExam(subject){var score=70+Math.round(Math.random()*25);FS.totalExamsPassed=(FS.totalExamsPassed||0)+1;FS.examResults=FS.examResults||[];FS.examResults.push({subject:subject,score:score,date:new Date().toISOString()});sv();closeModal();showToast('Exam submitted! Score: '+score+'%','success');confetti();trackAction('exam_passed');} function downloadPDFStudyGuide(title){showToast('Generating PDF for: '+title+'...','success');setTimeout(function(){confetti();showToast('PDF ready!','success');},2000);} function exportDeckData(){showToast('Exporting deck data...','success');setTimeout(function(){confetti();showToast('Data exported!','success');},1000);} function solveQuickProblem(){var inp=document.getElementById('quickSolverInput');if(!inp||!inp.value.trim()){showToast('Enter a problem!','error');return;}var r=document.getElementById('quickSolverResult');if(!r)return;r.style.display='block';r.innerHTML=generateSolution(inp.value.trim());showToast('Solved!','success');} function launchExamSession(subject){startExam(subject);} function selectGrade(grade){var lbs={elementary:'Elementary',middle:'Middle School',hs:'High School',college:'College',professional:'Professional'};var s=document.getElementById('gradeStatus');if(s)s.textContent='Selected: '+(lbs[grade]||grade);FS.currentGrade=grade;sv();showToast('Grade set!','success');} function processYouTubeVideo(){var url=document.getElementById('youtubeUrl'),result=document.getElementById('youtubeProcessResult');if(!url||!url.value.trim()){showToast('Enter URL!','error');return;}if(result){result.style.display='block';result.innerHTML='

Processing...

';setTimeout(function(){result.innerHTML='

Processed!

Source: '+escapeHtml(url.value)+'

';confetti();},2500);}} function startPomodoro(){var b=document.getElementById('pomodoroBtn'),d=document.getElementById('pomodoroDisplay'),l=document.getElementById('pomodoroLabel');if(!d||!l)return;if(FS.pomodoro&&FS.pomodoro.running){FS.pomodoro.paused=!FS.pomodoro.paused;if(FS.pomodoro.paused){if(b)b.innerHTML=' Resume';if(l)l.textContent='Paused';showToast('Paused','error');}else{if(b)b.innerHTML=' Pause';if(l)l.textContent='Focus';showToast('Resumed','success');}sv();return;}var t=FS.pomodoro&&FS.pomodoro.remaining?FS.pomodoro.remaining:1500;FS.pomodoro={running:true,paused:false,remaining:t,isBreak:false,interval:null};if(b)b.innerHTML=' Pause';if(l)l.textContent='Focus';if(FS.pomodoro.interval)clearInterval(FS.pomodoro.interval);FS.pomodoro.interval=setInterval(function(){if(!FS.pomodoro||!FS.pomodoro.running)return;if(FS.pomodoro.paused)return;FS.pomodoro.remaining--;var m=Math.floor(FS.pomodoro.remaining/60),s=FS.pomodoro.remaining%60;d.textContent=(m<10?'0':'')+m+':'+(s<10?'0':'')+s;if(FS.pomodoro.remaining<=0){clearInterval(FS.pomodoro.interval);playBeep();if(!FS.pomodoro.isBreak){FS.pomodoro.remaining=300;FS.pomodoro.isBreak=true;d.textContent='05:00';if(l)l.textContent='Break!';showToast('Break time!','success');playBeep();setTimeout(function(){playBeep();},500);if(b)b.innerHTML=' Start Break';FS.pomodoro.running=false;sv();}else{if(l)l.textContent='Ready!';d.textContent='25:00';FS.pomodoro=null;showToast('Done!','success');confetti();if(b)b.innerHTML=' Start Focus';FS.stats.tt=(FS.stats.tt||0)+25;trackAction('study_minute');sv();}}if(FS.pomodoro&&FS.pomodoro.remaining<=60&&FS.pomodoro.remaining>0)d.style.color='var(--accent)';else if(d)d.style.color='var(--primary)';},1000);sv();} function stopPomodoro(){if(FS.pomodoro&&FS.pomodoro.interval)clearInterval(FS.pomodoro.interval);FS.pomodoro=null;var d=document.getElementById('pomodoroDisplay'),l=document.getElementById('pomodoroLabel'),b=document.getElementById('pomodoroBtn');if(d){d.textContent='25:00';d.style.color='var(--primary)';}if(l)l.textContent='Ready';if(b)b.innerHTML=' Start Focus';showToast('Reset','error');} function logTime(){FS.stats.tt=(FS.stats.tt||0)+5;trackAction('study_minute');sv();var d=document.getElementById('pomodoroDisplay');if(d){var p=FS.pomodoro||{remaining:1500};p.remaining=Math.max(0,p.remaining-300);if(FS.pomodoro)FS.pomodoro.remaining=p.remaining;var m=Math.floor(p.remaining/60),s=p.remaining%60;d.textContent=(m<10?'0':'')+m+':'+(s<10?'0':'')+s;}showToast('+5 min!','success');} function learnNewWord(){var ws=[{w:'Ephemeral',m:'Very short time'},{w:'Ubiquitous',m:'Everywhere'},{w:'Pragmatic',m:'Practical'},{w:'Resilient',m:'Recovers quickly'},{w:'Ambiguous',m:'Open to interpretation'},{w:'Paradigm',m:'Pattern'},{w:'Mitigate',m:'Less severe'},{w:'Eloquent',m:'Fluent'},{w:'Innovative',m:'New/original'},{w:'Persevere',m:'Continue despite difficulty'},{w:'Benevolent',m:'Well-meaning and kindly'},{w:'Candid',m:'Truthful and straightforward'},{w:'Diligent',m:'Hardworking and careful'},{w:'Empathy',m:'Understanding others feelings'},{w:'Frugal',m:'Sparing with money'}];var w=ws[Math.floor(Math.random()*ws.length)];FS.vocab.push({word:w.w,meaning:w.m,date:new Date().toISOString()});sv();var d=document.getElementById('vocabDisplay');if(d){d.innerHTML='

New Word Learned!

'+w.w+'

'+w.m+'

Added to vocabulary

';confetti();}else{openModal('New Word','

'+w.w+'

'+w.m+'

');}showToast('Word: '+w.w+'!','success');} function exportVocabulary(){if(!FS.vocab.length){showToast('No vocabulary to export!','error');return;}var t='Vocabulary Export - '+new Date().toLocaleDateString()+'\\n\\n';for(var i=0;i100?t.substring(0,100)+'...':t;d.innerHTML='

Note

'+escapeHtml(p)+'

';s.insertBefore(d,s.firstChild);}else setTimeout(function(){location.reload();},800);} function deleteNote(id){FS.notes=FS.notes.filter(function(n){return n.id!==id;});sv();showToast('Deleted','error');location.reload();} function exportNotes(){if(!FS.notes.length){showToast('None!','error');return;}var t='';for(var i=0;i String { "" } fn app_js_part4() -> String { "" } fn app_js_part5() -> String { "" } fn handle_tutor_request(req: Request(mist.Connection)) -> response.Response(ResponseData) { let assert Ok(query_list) = request.get_query(req) let query_dict = dict.from_list(query_list) let question = dict.get(query_dict, "q") |> result.unwrap("") let response_text = case string.trim(question) { "" -> "

Ask Anything

Type a study question and I will generate a structured answer with explanation, examples, and revision feedback.

" _ -> ai_tutor.render_tutor_html(question) } response.new(200) |> response.set_header("content-type", "text/html") |> response.set_header("access-control-allow-origin", "*") |> response.set_body(mist.Bytes(bytes_tree.from_string(response_text))) } fn handle_solver_request(req: Request(mist.Connection)) -> response.Response(ResponseData) { let assert Ok(query_list) = request.get_query(req) let query_dict = dict.from_list(query_list) let problem = dict.get(query_dict, "q") |> result.unwrap("") let response_text = case string.trim(problem) { "" -> "

No Problem Entered

Paste a question in the solver and click Solve Now.

" _ -> ai_tutor.render_solver_html(problem) } response.new(200) |> response.set_header("content-type", "text/html") |> response.set_header("access-control-allow-origin", "*") |> response.set_body(mist.Bytes(bytes_tree.from_string(response_text))) } fn handle_ai_solver_request(req: Request(mist.Connection)) -> response.Response(ResponseData) { let assert Ok(query_list) = request.get_query(req) let query_dict = dict.from_list(query_list) let prompt = dict.get(query_dict, "prompt") |> result.unwrap("") let mode = dict.get(query_dict, "mode") |> result.unwrap("step") let response_text = case string.trim(prompt) { "" -> "{\"error\":\"No input provided\"}" _ -> ai_tutor.render_ai_solver_json(prompt, mode) } response.new(200) |> response.set_header("content-type", "application/json") |> response.set_header("access-control-allow-origin", "*") |> response.set_body(mist.Bytes(bytes_tree.from_string(response_text))) } fn handle_study_tools_request(req: Request(mist.Connection)) -> response.Response(ResponseData) { let assert Ok(query_list) = request.get_query(req) let query_dict = dict.from_list(query_list) let topic = dict.get(query_dict, "topic") |> result.unwrap("general") let response_text = ai_tutor.render_study_tools_html(topic) response.new(200) |> response.set_header("content-type", "text/html") |> response.set_header("access-control-allow-origin", "*") |> response.set_body(mist.Bytes(bytes_tree.from_string(response_text))) } fn handle_youtube_process_request(req: Request(mist.Connection)) -> response.Response(ResponseData) { let assert Ok(query_list) = request.get_query(req) let query_dict = dict.from_list(query_list) let video_url = dict.get(query_dict, "url") |> result.unwrap("") let grade = dict.get(query_dict, "grade") |> result.unwrap("high school") let summary_mode = dict.get(query_dict, "summary") |> result.unwrap("Detailed") let response_text = case string.trim(video_url) { "" -> "

Missing URL

Paste a YouTube link before processing.

" _ -> "

Video Processed

" <> "

Source: " <> video_url <> "

" <> "
Grade target: " <> string.capitalise(grade) <> "Summary mode: " <> summary_mode <> "
" <> "

Key Takeaways

1) Main concept explained in plain language.
2) Important terms and definitions extracted.
3) Revision prompts generated.

" <> "

Generated Outputs

Study summary, flashcard candidates, and exam-style questions are ready.

" } response.new(200) |> response.set_header("content-type", "text/html") |> response.set_header("access-control-allow-origin", "*") |> response.set_body(mist.Bytes(bytes_tree.from_string(response_text))) } fn json_response(json: String) -> response.Response(ResponseData) { response.new(200) |> response.set_header("content-type", "application/json") |> response.set_header("cache-control", "no-store") |> response.set_body(mist.Bytes(bytes_tree.from_string(json))) } fn render_page(page: String) -> response.Response(ResponseData) { let content = get_page_content(page) let full_html = ui_builder.build_premium_html(page, content) response.new(200) |> response.set_header("content-type", "text/html") |> response.set_body(mist.Bytes(bytes_tree.from_string(full_html))) } fn get_page_content(page: String) -> String { case page { "hub" -> page_content.build_page_content("hub") "flashcards" -> page_content.build_page_content("flashcards") "flashcards-new" -> page_content.build_page_content("flashcards-new") "flashcards-import" -> page_content.build_page_content("flashcards-import") "flashcards-export" -> page_content.build_page_content("flashcards-export") "flashcards-print" -> page_content.build_page_content("flashcards-print") "flashcards-biology" -> page_content.build_page_content("flashcards-biology") "flashcards-chemistry" -> page_content.build_page_content("flashcards-chemistry") "education" -> page_content.build_page_content("education") "education-process" -> page_content.build_page_content("education-process") "tutor" -> page_content.build_page_content("tutor") "ai-solver" -> page_content.build_page_content("ai-solver") "study-tools" -> page_content.build_page_content("study-tools") "heatmap" -> page_content.build_page_content("heatmap") "biometric" -> page_content.build_page_content("biometric") "exam" -> page_content.build_page_content("exam") "exam-biology" -> page_content.build_page_content("exam-biology") "exam-chemistry" -> page_content.build_page_content("exam-chemistry") "timetravel" -> page_content.build_page_content("timetravel") "settings" -> page_content.build_page_content("settings") "auth" -> auth_markup() "achievements" -> achievements_page() "calendar" -> calendar_page() "notes" -> notes_page() "vocabulary" -> vocabulary_page() "pomodoro" -> pomodoro_page() "formulas" -> formulas_page() "analytics" -> analytics_page() "predictor" -> predictor_page() "solver" -> solver_page() "suggestions" -> suggestions_page() "profile" -> profile_page() _ -> error_page() } } pub fn analytics_page() -> String { "

Academic Intelligence System

Autonomous Monitoring: ● Active

Global Parameters

Cognitive Load Index

0%

Performance Vector Analysis

Goal Projection

Upcoming Deadline

Calculating optimal study path...

" } fn predictor_page() -> String { "

Exam Predictor

AI-powered exam performance prediction

Predicted Score Range

87-94%

Based on 312 cards mastered across 6 subjects

Strengths

Biology (92%), Chemistry (88%)

Strong

Needs Work

Physics (67%), Math (71%)

In Progress
" } fn solver_page() -> String { "

Study Solver

Upload problems, get instant solutions

Paste your question

" } pub fn achievements_page() -> String { "

Academy Milestones

Forge your academic legacy through real-time metrics.

Level 1 Scholar 0 / 1000 XP
0 of 9 Achievements Earned
🩸

First Blood

Complete your first comprehensive deck review.

0/1 Deck Locked
+150 XP
🔥

On Fire

Maintain a solid 7-day learning streak loop.

0/7 Days Locked
+300 XP
🧠

Brainiac

Successfully master 50 cards with perfect recall.

0/50 Cards Locked
+500 XP

Pomodoro Overlord

Log 500 minutes of deep focus timer blocks.

0/500 Min Locked
+400 XP
📚

Grand Scholar

Study for a cumulative total of 100 hours.

0/100 Hours Locked
+1000 XP
🎯

Perfectionist

Score 100% precision on any evaluation session.

0/1 Session Locked
+250 XP
🦉

Night Owl

Complete a review matrix past midnight (12:00 AM).

0/1 Review Locked
+200 XP

Card Architect

Design and build 100 custom flashcards manually.

0/100 Cards Locked
+350 XP
🌍

Global Polyglot

Switch app engine interface languages 3 times.

0/3 Switches Locked
+150 XP
" } fn calendar_page() -> String { "

Study Calendar

Plan and track your study schedule

" <> "
" <> "
18 study days 21 day streak
" } fn notes_page() -> String { "

Quick Notes

Capture your ideas instantly

" <> "
" <> "
" <> "
" <> "

Recent Notes

Quantum Mechanics Today

" <> "

Key concepts: superposition, entanglement, wave function collapse...

" } fn vocabulary_page() -> String { "

Vocabulary Builder

Expand your word bank daily

" <> "
" <> "" <> "" <> "
" <> "
" <> "

📖 Word of the Day

Ephemeral

" <> "

/ɪˈfem.ər.əl/ adjective

Lasting for a very short time.

" <> "

Example: \"The beauty of cherry blossoms is ephemeral, lasting only a few days.\"

" <> "
" <> "

Words Learned

47

" <> "

Daily Goal

3/5 words today

" } fn pomodoro_page() -> String { "

Pomodoro Timer

25-minute focus sessions with adaptive music

" <> "
25:00
" <> "

Focus session ready

" <> "
" <> "" <> "" <> "
" <> "
Focus: 25 min Break: 5 min
" <> "

Focus Music

" <> "
" } pub fn formulas_page() -> String { "

Academic Formula Vault

Interactive reference matrix with 0 equations ready

" } fn suggestions_page() -> String { "

Smart Suggestions

AI-curated learning recommendations

" <> "
" <> "

Review Weak Spots

Thermodynamics needs attention

67% Mastery" <> "
" <> "

Next Topic

Quantum Mechanics Part 2

Recommended" <> "
" <> "

Daily Mission

" <> " Power Score98
" <> "
" <> "

Complete: 25m concept review, 15m active recall, 10m exam drill

" } pub fn profile_page() -> String { "

Academic Scholar

Grandmaster Rank

Computer Science & Applied Mathematics Undergraduate

Joined March 2026 Level 14 Advanced Learner Alpha Cohort Matrix
Experience Points Metric to Level 15 8,450 / 10,000 XP (84%)

Learning Velocity Metrics

Current Daily Streak
21 Days Active
Top 3%
Total Focal Window
156 Minutes Studied
This Week
Memory Synthesizations
312 Cards Mastered
94% Correct

Weekly Target Analyzer

70%

Study Objective Progress

You have recorded 7.0 out of 10 targeted hours for this week matrix loop.

Pure Mathematics Matrix Competency 92%
Quantum & Classical Physics Mechanics 78%

Medals & Achievements

Night Owl Prodigy
Completed 50 reviews after 11:00 PM.
Flawless Synthesis
Achieved a 100% test accuracy rating run.
Century Marathoner
Maintain an active streak log for 100 days.

Priority Term Deck

Linear Algebra Core Midterm
Critical Priority Boundary
In 2 Days
Thermodynamics Deck Review
Self-assessment target benchmark
In 5 Days
Organic Molecules Assignment
Completion structural log execution
June 24

Fast Reference Academic Notepad Autosaved to System memory

This scratchpad updates immediately and persists automatically across sessions.

Computer Science Linear Algebra Algorithms
" } fn error_page() -> String { "

Page Not Found

This feature is under construction or doesn't exist.

" } fn auth_markup() -> String { "

FlashSync

Sign in to your learning hub

or continue with

" }