[{"data":1,"prerenderedAt":224},["ShallowReactive",2],{"i-lucide:chevron-down":3,"i-lucide:arrow-up-right":8,"i-simple-icons:github":10,"i-simple-icons:x":12,"i-brand:linkedin":14,"i-simple-icons:medium":18,"i-lucide:mail":20,"i-lucide:sun":22,"project:\u002Fprojects\u002Fquran-tracker":24,"project-more:\u002Fprojects\u002Fquran-tracker":184,"i-lucide:book-open":206,"i-lucide:calendar":208,"i-lucide:clipboard-check":210,"i-lucide:users":212,"i-lucide:house":214,"i-lucide:repeat":216,"i-lucide:calendar-check":218,"i-lucide:trophy":220,"i-lucide:download":222},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"currentColor\" d=\"M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z\"\u002F>",{"left":4,"top":15,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":17},32,448,"\u003Cpath fill=\"currentColor\" d=\"M416 32L31.9 32C14.3 32 0 46.5 0 64.3L0 447.7C0 465.5 14.3 480 31.9 480L416 480c17.6 0 32-14.5 32-32.3l0-383.4C448 46.5 433.6 32 416 32zM135.4 416l-66.4 0 0-213.8 66.5 0 0 213.8-.1 0zM102.2 96a38.5 38.5 0 1 1 0 77 38.5 38.5 0 1 1 0-77zM384.3 416l-66.4 0 0-104c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9l0 105.8-66.4 0 0-213.8 63.7 0 0 29.2 .9 0c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9l0 117.2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cpath fill=\"currentColor\" d=\"M4.21 0A4.2 4.2 0 0 0 0 4.21v15.58A4.2 4.2 0 0 0 4.21 24h15.58A4.2 4.2 0 0 0 24 19.79v-1.093a5 5 0 0 1-.422.02c-2.577 0-4.027-2.146-4.09-4.832a8 8 0 0 1 .022-.708c.093-1.186.475-2.241 1.105-3.022a3.9 3.9 0 0 1 1.395-1.1c.468-.237 1.127-.367 1.664-.367h.023q.151 0 .303.01V4.211A4.2 4.2 0 0 0 19.79 0Zm.198 5.583h4.165l3.588 8.435l3.59-8.435h3.864v.146l-.019.004c-.705.16-1.063.397-1.063 1.254h-.003l.003 10.274c.06.676.424.885 1.063 1.03l.02.004v.145h-4.923v-.145l.019-.005c.639-.144.994-.353 1.054-1.03V7.267l-4.745 11.15h-.261L6.15 7.569v9.445c0 .857.358 1.094 1.063 1.253l.02.004v.147H4.405v-.147l.019-.004c.705-.16 1.065-.397 1.065-1.253V6.987c0-.857-.358-1.094-1.064-1.254l-.018-.004zm19.25 3.668c-1.086.023-1.733 1.323-1.813 3.124H24V9.298a1.4 1.4 0 0 0-.342-.047m-1.862 3.632c-.1 1.756.86 3.239 2.204 3.634v-3.634z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"\u002F>\u003Crect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":23},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"page":25,"project":171},{"id":26,"title":27,"body":28,"description":162,"extension":163,"meta":164,"navigation":165,"path":166,"seo":167,"sitemap":168,"stem":169,"__hash__":170},"projectPages\u002Fprojects\u002Fquran-tracker.md","Quran Tracker",{"type":29,"value":30,"toc":152},"minimark",[31,36,48,51,55,58,81,85,93,99,105,109,114,118,122,126,129,137,145],[32,33,35],"h2",{"id":34},"overview","Overview",[37,38,44],"project-shot",{":single":39,"alt":40,"height":41,"src":42,"width":43,":bare":39},"true","Three screens of the system, in Arabic, with demo data. In front, a student's dashboard: notifications, the date, the student's role and circle, attendance (5 of 6 days), grade and rank (100 of 100, first of 12 students), and the pages reviewed and memorized with the surahs they run between. Tilted behind it, the teacher's weekly entry form on the left, and the test entry form on the right.",660,"\u002Fprojects\u002Fquran-tracker\u002Fscreens.webp",1760,[45,46,47],"p",{},"A student's dashboard in front, with the teacher's weekly entry and test entry behind it.",[45,49,50],{},"A web system for Qur'an memorization circles. Teachers record each student's week: attendance, the pages memorized and reviewed, a grade and a rank in the circle, and tests. Students sign in to a dashboard of their own progress, and parents follow their child's progress and test scores. I designed and built it on my own in 2016.",[32,52,54],{"id":53},"the-problem","The problem",[45,56,57],{},"A memorization circle has a lot to follow for every student, every week.",[59,60,61,69,75],"ul",{},[62,63,64,68],"li",{},[65,66,67],"strong",{},"Memorization and review."," How many pages each student memorized and reviewed, and from which surah to which.",[62,70,71,74],{},[65,72,73],{},"Attendance and tests."," The days each student came, and the grade for each part (juz') tested.",[62,76,77,80],{},[65,78,79],{},"Where each student stands."," A grade and a rank in the circle that students and parents can see, not only the teacher.",[32,82,84],{"id":83},"the-solution","The solution",[86,87,90],"sketch-figure",{"alt":88,"name":89},"A week in a memorization circle, left to right: the teacher records each student's week (days attended, pages memorized, pages reviewed, a grade and rank, and tests with the part and the grade); it is kept as the student's record, highlighted; and the student's dashboard shows, for example, memorized 5 of 5 pages, reviewed 5 of 7 pages, attended 5 of 6 days, grade 100 of 100 and rank 1 of 12. Below: memorization and test data can be exported.","quran-tracker\u002Fweek",[45,91,92],{},"The teacher's weekly entry becomes each student's dashboard.",[45,94,95,98],{},[65,96,97],{},"One form a week."," For each student, the teacher enters the days attended, the pages memorized and reviewed with the surahs they run between, and a grade and rank in the circle. Tests are entered by part, with their grade.",[45,100,101,104],{},[65,102,103],{},"A dashboard for every student."," Students see their week at a glance: attendance, pages memorized and reviewed, their grade and their rank in the circle.",[32,106,108],{"id":107},"what-i-did","What I did",[59,110,111],{},[62,112,113],{},"Designed and built the whole system on my own: the teacher, student and parent views, the weekly records, tests, ranking and export.",[32,115,117],{"id":116},"what-it-offers","What it offers",[119,120],"feature-grid",{":items":121},"[{\"icon\":\"lucide:users\",\"title\":\"Circles of students\",\"text\":\"Teachers register students into a circle and manage its list.\"},{\"icon\":\"lucide:book-open\",\"title\":\"Weekly memorization\",\"text\":\"Pages memorized each week, from which surah and verse to which.\"},{\"icon\":\"lucide:repeat\",\"title\":\"Review\",\"text\":\"Pages reviewed each week, out of the pages set.\"},{\"icon\":\"lucide:calendar-check\",\"title\":\"Attendance\",\"text\":\"The days each student attended in the week.\"},{\"icon\":\"lucide:clipboard-check\",\"title\":\"Tests by part\",\"text\":\"Each test records the part (juz') and the grade.\"},{\"icon\":\"lucide:trophy\",\"title\":\"A rank in the circle\",\"text\":\"The teacher sets each student's grade and place in the circle, and the student sees both.\"},{\"icon\":\"lucide:house\",\"title\":\"A view for parents\",\"text\":\"Parents follow their child's memorization progress and test scores.\"},{\"icon\":\"lucide:download\",\"title\":\"Export\",\"text\":\"Memorization and test data can be exported.\"}]",[32,123,125],{"id":124},"in-the-product","In the product",[45,127,128],{},"The screens show demo data, entered under my own name.",[37,130,134],{":single":39,"alt":131,"height":132,"src":133,"width":43},"A student's dashboard: an empty notifications box, the date, the student role and the circle's name, then cards for attendance (5 of 6 days, absent 1), grade and rank (100 of 100, first of 12 students), review (5 of 7 pages, between two surahs) and memorization (5 of 5 pages, between two surahs). The student's name and the menu sit on the right.",799,"\u002Fprojects\u002Fquran-tracker\u002Fdashboard.webp",[45,135,136],{},"A student's week at a glance.",[37,138,142],{":single":39,"alt":139,"height":140,"src":141,"width":43},"The teacher's weekly entry form: a student picker, then sections for attendance (days attended out of 6, days absent), memorization (pages out of the pages set, from which surah to which), review (the same fields) and grade and rank (a percentage, the student's place and the number of students), with a save button. The teacher's menu sits on the right.",999,"\u002Fprojects\u002Fquran-tracker\u002Fweekly-record.webp",[45,143,144],{},"The teacher fills in one form per student each week.",[37,146,149],{":single":39,"alt":147,"height":132,"src":148,"width":43},"The test entry form: a student picker, then the part (juz') the student was tested on and the grade as a percentage, with a save button.","\u002Fprojects\u002Fquran-tracker\u002Ftest-entry.webp",[45,150,151],{},"Tests are recorded by part, with a grade.",{"title":153,"searchDepth":154,"depth":154,"links":155},"",2,[156,157,158,159,160,161],{"id":34,"depth":154,"text":35},{"id":53,"depth":154,"text":54},{"id":83,"depth":154,"text":84},{"id":107,"depth":154,"text":108},{"id":116,"depth":154,"text":117},{"id":124,"depth":154,"text":125},"A web system I designed and built for Qur’an memorization circles: teachers record each student’s week, and students and parents follow memorization, tests and rank.","md",{},true,"\u002Fprojects\u002Fquran-tracker",{"description":162},{"loc":166},"projects\u002Fquran-tracker","yrMVKAYJx5VqTNm5VJItffRnhNvZUt_9hP8Jj1T2Bz8",{"id":172,"title":173,"context":174,"description":175,"extension":176,"highlight":177,"links":178,"mark":179,"meta":181,"order":154,"stem":169,"year":182,"__hash__":183},"projects\u002Fprojects\u002Fquran-tracker.yml","Qur’an memorization tracker","Jan 2016 – Jan 2017","Dashboards for teachers, students and parents to follow Qur’an memorization progress and test scores.","yml",null,[],{"icon":180},"lucide:book-open",{},2016,"uFRl65gR6P-lcBqhnWjtgQlkQOjQe7NXLln5FAvsEK4",[185,192,199],{"path":186,"title":187,"description":188,"mark":189,"year":191},"\u002Fprojects\u002Frunarks","Runarks · Governed access to production databases","My own product: every query against a production database is reviewed, approved, run once and logged, and nobody sees a password.",{"logo":190},"runarks",2026,{"path":193,"title":194,"description":195,"mark":196,"year":198},"\u002Fprojects\u002Fsanad","Sanad · Real-estate investment platform","The API and admin dashboard I built for a Saudi real-estate investment platform: verified investors, a wallet, investments and returns paid on a schedule.",{"logo":197},"sanad",2024,{"path":200,"title":201,"description":202,"mark":203,"year":205},"\u002Fprojects\u002Fwinch","WINCH · Saudi logistics platform","The back end of a Saudi logistics platform for businesses and carriers: more than 50 domains, and the integration engine I built for government services, payments and AI.",{"logo":204},"winch",2023,{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":207},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m8.001-2A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":209},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M8 2v3m8-3v3\"\u002F>\u003Crect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"\u002F>\u003Cpath d=\"M3 9h18\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":211},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003Cpath d=\"m9 14l2 2l4-4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":213},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M16 3.128a4 4 0 0 1 0 7.744M22 21v-2a4 4 0 0 0-3-3.87\"\u002F>\u003Ccircle cx=\"9\" cy=\"7\" r=\"4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":215},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"\u002F>\u003Cpath d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":217},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m17 2l4 4l-4 4\"\u002F>\u003Cpath d=\"M3 11v-1a4 4 0 0 1 4-4h14M7 22l-4-4l4-4\"\u002F>\u003Cpath d=\"M21 13v1a4 4 0 0 1-4 4H3\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":219},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M8 2v3m8-3v3\"\u002F>\u003Crect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"\u002F>\u003Cpath d=\"M3 9h18M9 15l2 2l4-4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":221},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M10 14.66V17a1 1 0 0 1-1 1a2 2 0 0 0-2 2v2m7-7.34V17a1 1 0 0 0 1 1a2 2 0 0 1 2 2v2m.916-12H19.5A2.5 2.5 0 0 0 22 7.5V5a1 1 0 0 0-1-1h-3M4 22h16\"\u002F>\u003Cpath d=\"M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z\"\u002F>\u003Cpath d=\"M6.084 10H4.5A2.5 2.5 0 0 1 2 7.5V5a1 1 0 0 1 1-1h3\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":223},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\u002F>\u003Cpath d=\"m7 10l5 5l5-5\"\u002F>\u003C\u002Fg>",1791781461396]