[{"data":1,"prerenderedAt":1753},["ShallowReactive",2],{"project-makassar-raya-motor":3,"all-projects":186},{"id":4,"title":5,"architecture":6,"body":27,"category":148,"company":149,"contribution":150,"cover":153,"description":154,"draft":155,"extension":156,"featured":157,"links":158,"meta":162,"metrics":163,"navigation":157,"order":138,"path":173,"role":174,"seo":175,"stem":176,"technologies":177,"timeline":182,"type":183,"year":184,"__hash__":185},"projects\u002Fprojects\u002Fmakassar-raya-motor.md","Spatial Sales Intelligence",[7,11,15,19,23],{"id":8,"label":9,"detail":10},"data","Sales data + BPS indicators","Dealer sales records combined with GDP, per-capita income and population data from Statistics Indonesia (BPS).",{"id":12,"label":13,"detail":14},"geo","GeoJSON boundaries","Province, district and sub-district boundaries prepared with the spatial mapping team.",{"id":16,"label":17,"detail":18},"api","FastAPI spatial service","Processes spatial data and powers the mapping features.",{"id":20,"label":21,"detail":22},"viz","Plotly dashboards","Interactive maps and charts per province, district and sub-district.",{"id":24,"label":25,"detail":26},"app","Laravel Livewire web app","Data management, imports and the embedded dashboards in one place.",{"type":28,"value":29,"toc":136},"minimark",[30,35,39,43,46,50,83,87,90,94,105,109,113,116,120,128,132],[31,32,34],"h2",{"id":33},"problem","Problem",[36,37,38],"p",{},"PT. Makassar Raya Motor runs 10 Daihatsu branches across South, Central and Southeast Sulawesi. Sales decisions were made without a clear geographic view of where demand was strong, weak, or untapped.",[31,40,42],{"id":41},"context","Context",[36,44,45],{},"Sales data existed, but not tied to geography or to socio-economic context. The analysis had to work at multiple levels — province, district, sub-district and village — and be usable by non-technical stakeholders.",[31,47,49],{"id":48},"solution","Solution",[51,52,53,61,67,73],"ul",{},[54,55,56,60],"li",{},[57,58,59],"strong",{},"Spatial analysis"," of sales across 3 provinces, 54 districts, 709 sub-districts and 7,394 villages.",[54,62,63,66],{},[57,64,65],{},"Maps with context"," — combined with GDP, per-capita income and population indicators from BPS, designed together with urban-planning experts.",[54,68,69,72],{},[57,70,71],{},"Interactive dashboards"," built with Python Plotly.",[54,74,75,78,79,82],{},[57,76,77],{},"A full-stack web app"," (Laravel Livewire) for data management, imports and the embedded dashboards, backed by a ",[57,80,81],{},"FastAPI"," service for spatial processing.",[31,84,86],{"id":85},"architecture","Architecture",[88,89],"architecture-explorer",{":nodes":85},[31,91,93],{"id":92},"technical-challenges","Technical challenges",[51,95,96,99,102],{},[54,97,98],{},"Absorbing and cleaning GeoJSON for three provinces at several administrative levels.",[54,100,101],{},"Keeping maps responsive while rendering hundreds of sub-district polygons.",[54,103,104],{},"Joining sales records to administrative areas consistently.",[31,106,108],{"id":107},"impact","Impact",[110,111],"metric-grid",{":metrics":112},"metrics",[36,114,115],{},"Stakeholders could explore sales performance next to socio-economic indicators at a glance, instead of reading spreadsheets per branch.",[31,117,119],{"id":118},"lessons-learned","Lessons learned",[36,121,122,123,127],{},"The value of a dashboard is in the questions it lets people ask. Pairing sales with public socio-economic data turned \"where did we sell?\" into \"where ",[124,125,126],"em",{},"should"," we sell?\".",[31,129,131],{"id":130},"snapshots","Snapshots",[133,134],"gallery",{":images":135},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fmakassar-raya-motor\u002Fmrm1.jpeg\",\"alt\":\"Map analysis\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fmakassar-raya-motor\u002Fmrm3.jpeg\",\"alt\":\"Dashboard analysis\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fmakassar-raya-motor\u002Fmrm2.jpeg\",\"alt\":\"Data management\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fmakassar-raya-motor\u002Fmrm4.jpeg\",\"alt\":\"Data import feature\"}]",{"title":137,"searchDepth":138,"depth":138,"links":139},"",2,[140,141,142,143,144,145,146,147],{"id":33,"depth":138,"text":34},{"id":41,"depth":138,"text":42},{"id":48,"depth":138,"text":49},{"id":85,"depth":138,"text":86},{"id":92,"depth":138,"text":93},{"id":107,"depth":138,"text":108},{"id":118,"depth":138,"text":119},{"id":130,"depth":138,"text":131},"Data · Geo-web","PT. Makassar Raya Motor",{"team":151,"mine":152},"Map design was done together with urban-planning experts on the spatial mapping team.","Spatial analysis, the Plotly dashboards, the FastAPI backend and the Livewire web application.","\u002Fimages\u002Fwork\u002Fmakassar-raya-motor\u002Fmrm1.jpeg","Spatial analysis and an interactive dashboard that maps sales performance across 3 provinces down to 7,394 villages for a Daihatsu dealer group.",false,"md",true,[159],{"label":160,"url":161},"Client profile","https:\u002F\u002Fdaihatsumrm.co.id\u002F",{},[164,167,170],{"value":165,"label":166},"3","provinces analysed",{"value":168,"label":169},"709","sub-districts mapped",{"value":171,"label":172},"7,394","villages covered","\u002Fprojects\u002Fmakassar-raya-motor","Software Engineer & Data Analyst (Contract)",{"title":5,"description":154},"projects\u002Fmakassar-raya-motor",[178,81,179,180,181],"Python","Plotly","Laravel Livewire","GeoJSON","Oct 2023 — Jun 2024","engineering",2024,"bGREcI692oktWbSfMrCeDO6Lms7uwU3asq7TIMqFZIc",[187,342,431,700,810,934,1068,1129,1298,1347,1443,1557,1600,1641,1682,1724],{"id":188,"title":189,"architecture":190,"body":214,"category":306,"company":307,"contribution":308,"cover":311,"description":312,"draft":155,"extension":156,"featured":157,"links":313,"meta":318,"metrics":319,"navigation":157,"order":329,"path":330,"role":331,"seo":332,"stem":333,"technologies":334,"timeline":339,"type":183,"year":340,"__hash__":341},"projects\u002Fprojects\u002Fvektorpedia.md","VektorPedia",[191,195,199,203,207,210],{"id":192,"label":193,"detail":194},"sources","GloBI · Wikidata · DBpedia · NCBITaxon","Four public knowledge graphs describing species, taxonomy and biotic interactions.",{"id":196,"label":197,"detail":198},"ingest","Ingestion & alignment","Entities from each source are ingested and aligned into one biodiversity knowledge graph.",{"id":200,"label":201,"detail":202},"graph","Biodiversity knowledge graph","Insects, viruses and plants connected by typed interaction edges.",{"id":204,"label":205,"detail":206},"analysis","Network analysis & scoring","Graph metrics score how likely an insect is to act as a vector for a plant virus.",{"id":16,"label":208,"detail":209},"Python web server","Handles queries and data processing for the search engine.",{"id":211,"label":212,"detail":213},"client","Vue client","Search UI for researchers to explore candidate vectors and their evidence.",{"type":28,"value":215,"toc":296},[216,218,228,230,233,235,241,243,245,247,267,269,271,286,288,291,293],[31,217,34],{"id":33},[36,219,220,221,224,225,227],{},"Plant viruses spread through insects, but the knowledge of ",[124,222,223],{},"which"," insect carries ",[124,226,223],{}," virus is scattered across many biodiversity databases. Researchers and plant-disease practitioners had no single place to ask: \"which insects are likely vectors for this virus?\"",[31,229,42],{"id":41},[36,231,232],{},"This was my master's thesis at IPB University. The data already existed publicly — in Global Biotic Interactions (GloBI), Wikidata, DBpedia and the NCBI Taxonomy ontology — but in different shapes, identifiers and levels of completeness.",[31,234,49],{"id":48},[36,236,237,238,240],{},"I built ",[57,239,189],{},", a search engine backed by an integrated biodiversity knowledge graph. Data from the four sources was ingested and aligned into one graph that captures relationships between insects, viruses and plants. Network analysis on that graph surfaces and scores candidate insect vectors.",[31,242,86],{"id":85},[88,244],{":nodes":85},[31,246,93],{"id":92},[51,248,249,255,261],{},[54,250,251,254],{},[57,252,253],{},"Heterogeneous sources"," — each knowledge graph uses its own identifiers and vocabulary, so entities had to be aligned before any analysis made sense.",[54,256,257,260],{},[57,258,259],{},"Signal from structure"," — interactions are sparse; network analysis was used to infer likely vectors from how species are connected, not just from direct records.",[54,262,263,266],{},[57,264,265],{},"Research to product"," — turning a research pipeline into a usable search application within about three months.",[31,268,108],{"id":107},[110,270],{":metrics":112},[36,272,273,274,277,278,285],{},"The work was published in a Scopus-indexed journal (",[124,275,276],{},"JISEBI",", 2024) and deployed at ",[279,280,284],"a",{"href":281,"rel":282},"https:\u002F\u002Fvektorpedia.ipb.ac.id\u002F",[283],"nofollow","vektorpedia.ipb.ac.id",".",[31,287,119],{"id":118},[36,289,290],{},"Knowledge graphs are powerful precisely because they carry context — but most of the effort is in the unglamorous alignment work. A good search experience on top is what makes the research usable by people outside the lab.",[31,292,131],{"id":130},[133,294],{":images":295},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fvektorpedia\u002F1.jpeg\",\"alt\":\"Summary of the idea\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fvektorpedia\u002F2.jpeg\",\"alt\":\"Research stages\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fvektorpedia\u002F3.jpeg\",\"alt\":\"Interaction graph\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fvektorpedia\u002F4.jpeg\",\"alt\":\"Embedded taxon\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fvektorpedia\u002F5.jpg\",\"alt\":\"Insect vector scoring\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fvektorpedia\u002F6.jpg\",\"alt\":\"Detail information page\"}]",{"title":137,"searchDepth":138,"depth":138,"links":297},[298,299,300,301,302,303,304,305],{"id":33,"depth":138,"text":34},{"id":41,"depth":138,"text":42},{"id":48,"depth":138,"text":49},{"id":85,"depth":138,"text":86},{"id":92,"depth":138,"text":93},{"id":107,"depth":138,"text":108},{"id":118,"depth":138,"text":119},{"id":130,"depth":138,"text":131},"AI · Knowledge Graph","IPB University",{"team":309,"mine":310},"Research direction and supervision came from my thesis supervisors.","Data ingestion, knowledge-graph integration, network analysis, and the full search application (backend + frontend).","\u002Fimages\u002Fwork\u002Fvektorpedia\u002F6.jpg","A search engine that finds insect vectors of plant viruses by integrating four public knowledge graphs and running network analysis on top.",[314,315],{"label":284,"url":281},{"label":316,"url":317},"Published paper","https:\u002F\u002Fe-journal.unair.ac.id\u002FJISEBI\u002Farticle\u002Fview\u002F50015",{},[320,323,326],{"value":321,"label":322},"4","public knowledge graphs integrated",{"value":324,"label":325},"3 mo","from design to deployed app",{"value":327,"label":328},"Scopus","indexed publication",1,"\u002Fprojects\u002Fvektorpedia","Researcher & Engineer (Master thesis)",{"title":189,"description":312},"projects\u002Fvektorpedia",[178,335,336,337,338],"Vue","SPARQL","Knowledge Graph","Network Analysis","Aug 2022 — Dec 2023",2023,"b7KEWrhhnA8FnuwUaCAHa_fTp00VM1p5sOYETLjJims",{"id":4,"title":5,"architecture":343,"body":349,"category":148,"company":149,"contribution":421,"cover":153,"description":154,"draft":155,"extension":156,"featured":157,"links":422,"meta":424,"metrics":425,"navigation":157,"order":138,"path":173,"role":174,"seo":429,"stem":176,"technologies":430,"timeline":182,"type":183,"year":184,"__hash__":185},[344,345,346,347,348],{"id":8,"label":9,"detail":10},{"id":12,"label":13,"detail":14},{"id":16,"label":17,"detail":18},{"id":20,"label":21,"detail":22},{"id":24,"label":25,"detail":26},{"type":28,"value":350,"toc":411},[351,353,355,357,359,361,381,383,385,387,395,397,399,401,403,407,409],[31,352,34],{"id":33},[36,354,38],{},[31,356,42],{"id":41},[36,358,45],{},[31,360,49],{"id":48},[51,362,363,367,371,375],{},[54,364,365,60],{},[57,366,59],{},[54,368,369,66],{},[57,370,65],{},[54,372,373,72],{},[57,374,71],{},[54,376,377,78,379,82],{},[57,378,77],{},[57,380,81],{},[31,382,86],{"id":85},[88,384],{":nodes":85},[31,386,93],{"id":92},[51,388,389,391,393],{},[54,390,98],{},[54,392,101],{},[54,394,104],{},[31,396,108],{"id":107},[110,398],{":metrics":112},[36,400,115],{},[31,402,119],{"id":118},[36,404,122,405,127],{},[124,406,126],{},[31,408,131],{"id":130},[133,410],{":images":135},{"title":137,"searchDepth":138,"depth":138,"links":412},[413,414,415,416,417,418,419,420],{"id":33,"depth":138,"text":34},{"id":41,"depth":138,"text":42},{"id":48,"depth":138,"text":49},{"id":85,"depth":138,"text":86},{"id":92,"depth":138,"text":93},{"id":107,"depth":138,"text":108},{"id":118,"depth":138,"text":119},{"id":130,"depth":138,"text":131},{"team":151,"mine":152},[423],{"label":160,"url":161},{},[426,427,428],{"value":165,"label":166},{"value":168,"label":169},{"value":171,"label":172},{"title":5,"description":154},[178,81,179,180,181],{"id":432,"title":433,"architecture":434,"body":449,"category":669,"company":670,"contribution":671,"cover":673,"description":674,"draft":155,"extension":156,"featured":157,"links":675,"meta":679,"metrics":680,"navigation":157,"order":689,"path":690,"role":691,"seo":692,"stem":693,"technologies":694,"timeline":697,"type":183,"year":698,"__hash__":699},"projects\u002Fprojects\u002Ftimemarket.md","TimeMarket",[435,438,442,445],{"id":211,"label":436,"detail":437},"Mobile-first PWA","Installable from Chrome so it behaves like a native Android app.",{"id":439,"label":440,"detail":441},"ui","Livewire components","Interactive UI without a separate SPA, which kept development fast.",{"id":24,"label":443,"detail":444},"Laravel application","Programmes (proker), jobs, delegation rules and the role\u002Fpermission model.",{"id":446,"label":447,"detail":448},"db","MySQL","Employees, programmes, jobs and workload history.",{"type":28,"value":450,"toc":660},[451,453,456,458,480,482,507,514,516,518,520,527,648,650,652,655,657],[31,452,34],{"id":33},[36,454,455],{},"As part of Bank Indonesia's internal innovation programme, the Gorontalo office needed a way to delegate work accurately, monitor it, and keep each employee's workload within a reasonable limit.",[31,457,42],{"id":41},[36,459,460,461,464,465,464,468,471,472,475,476,479],{},"It had to be usable from anywhere and easy for every employee — from staff to the head of office. Four roles were involved: ",[57,462,463],{},"Employee",", ",[57,466,467],{},"Team Leader (Chief)",[57,469,470],{},"Head of Office (KPw)"," and ",[57,473,474],{},"Admin",", each with different rights over programmes (",[124,477,478],{},"proker",") and jobs.",[31,481,49],{"id":48},[51,483,484,491,497,504],{},[54,485,486,487,490],{},"An interactive UI with ",[57,488,489],{},"Livewire"," to keep development fast.",[54,492,493,496],{},[57,494,495],{},"Mobile-first"," design so it works equally well on desktop and phones.",[54,498,499,500,503],{},"A ",[57,501,502],{},"semi-PWA"," mode: with the right metadata, the app can be installed from Chrome and opened like a native Android app.",[54,505,506],{},"A user manual for rollout.",[36,508,509],{},[510,511],"video",{"src":512,"controls":157,"muted":157,"playsInline":157,"preload":513},"\u002Fimages\u002Fwork\u002Ftimemarket\u002Ftimemarket_homescreen.webm","none",[31,515,86],{"id":85},[88,517],{":nodes":85},[31,519,93],{"id":92},[36,521,522,523,526],{},"The permission model was the core of the product: who can create, edit, transfer or complete a job depends on the role ",[124,524,525],{},"and"," on whether the user leads that programme.",[528,529,530,550],"table",{},[531,532,533],"thead",{},[534,535,536,540,542,545,548],"tr",{},[537,538,539],"th",{},"Feature",[537,541,463],{},[537,543,544],{},"Chief",[537,546,547],{},"Head of Office",[537,549,474],{},[551,552,553,568,582,596,609,622,635],"tbody",{},[534,554,555,559,562,564,566],{},[556,557,558],"td",{},"View programmes & jobs",[556,560,561],{},"Yes",[556,563,561],{},[556,565,561],{},[556,567,561],{},[534,569,570,573,576,578,580],{},[556,571,572],{},"Add programme",[556,574,575],{},"—",[556,577,561],{},[556,579,575],{},[556,581,575],{},[534,583,584,587,590,592,594],{},[556,585,586],{},"Edit programme",[556,588,589],{},"If programme lead",[556,591,561],{},[556,593,575],{},[556,595,561],{},[534,597,598,601,603,605,607],{},[556,599,600],{},"Add \u002F edit \u002F delete job",[556,602,589],{},[556,604,589],{},[556,606,575],{},[556,608,575],{},[534,610,611,614,616,618,620],{},[556,612,613],{},"Transfer job to others",[556,615,589],{},[556,617,589],{},[556,619,575],{},[556,621,575],{},[534,623,624,627,629,631,633],{},[556,625,626],{},"Mark job completed",[556,628,561],{},[556,630,575],{},[556,632,575],{},[556,634,575],{},[534,636,637,640,642,644,646],{},[556,638,639],{},"Main calendar",[556,641,561],{},[556,643,561],{},[556,645,561],{},[556,647,575],{},[31,649,108],{"id":107},[110,651],{":metrics":112},[36,653,654],{},"The contract was extended for a second version, delivered in 3 months, followed by 6 months of maintenance.",[31,656,119],{"id":118},[36,658,659],{},"For internal tools, adoption beats features. Making it installable on the phones people already carried did more for usage than any single feature.",{"title":137,"searchDepth":138,"depth":138,"links":661},[662,663,664,665,666,667,668],{"id":33,"depth":138,"text":34},{"id":41,"depth":138,"text":42},{"id":48,"depth":138,"text":49},{"id":85,"depth":138,"text":86},{"id":92,"depth":138,"text":93},{"id":107,"depth":138,"text":108},{"id":118,"depth":138,"text":119},"Product · Full-stack","Bank Indonesia — Gorontalo Office",{"mine":672},"Full-stack development of v1 and v2, the PWA mode, and the user manual.","\u002Fimages\u002Fwork\u002Ftimemarket\u002Ftimemarket.png","A workload-management PWA for Bank Indonesia's Gorontalo office that balances how work is delegated across employees.",[676],{"label":677,"url":678},"timemarket.masuk.id","https:\u002F\u002Ftimemarket.masuk.id",{},[681,683,686],{"value":321,"label":682},"user roles with distinct permissions",{"value":684,"label":685},"6 mo","full-stack build of v1",{"value":687,"label":688},"v2","contract extended for a second version",3,"\u002Fprojects\u002Ftimemarket","Web Developer (Contract)",{"title":433,"description":674},"projects\u002Ftimemarket",[695,489,696,447],"Laravel","PWA","May 2021 — Aug 2022",2021,"IXjAXXBIvqG20D-syQXaeIRNsSWKhSxb7huCy3AP2qE",{"id":701,"title":702,"architecture":703,"body":718,"category":782,"company":702,"contribution":783,"cover":786,"description":787,"draft":155,"extension":156,"featured":157,"links":788,"meta":792,"metrics":793,"navigation":157,"order":800,"path":801,"role":802,"seo":803,"stem":804,"technologies":805,"timeline":808,"type":183,"year":340,"__hash__":809},"projects\u002Fprojects\u002Fcontag.md","Contag School",[704,708,711,715],{"id":705,"label":706,"detail":707},"clients","Back office & app","Admin back office and the end-user application.",{"id":16,"label":709,"detail":710},"NestJS API","Modular services with dependency injection, one module per domain.",{"id":712,"label":713,"detail":714},"domain","Academic domain modules","20+ modules covering academic-affairs workflows.",{"id":446,"label":716,"detail":717},"Database","Persistent academic data.",{"type":28,"value":719,"toc":773},[720,722,725,727,741,743,745,747,759,761,763,765,768,770],[31,721,34],{"id":33},[36,723,724],{},"Contag School builds SaaS products for university academic-affairs management. They needed a robust backend so their back office and apps could share data and automate workflows.",[31,726,49],{"id":48},[36,728,729,730,733,734,737,738,285],{},"I developed ",[57,731,732],{},"more than 20 API modules"," on ",[57,735,736],{},"NestJS",", tailored to Contag's academic workflows, and kept a steady delivery rhythm with ",[57,739,740],{},"800+ commits",[31,742,86],{"id":85},[88,744],{":nodes":85},[31,746,93],{"id":92},[51,748,749,752],{},[54,750,751],{},"Keeping a growing number of modules consistent and independent — NestJS modules + dependency injection helped enforce boundaries.",[54,753,754,755,758],{},"Applying ",[57,756,757],{},"SOLID"," principles so new features extend the system instead of rewriting it.",[31,760,108],{"id":107},[110,762],{":metrics":112},[31,764,119],{"id":118},[36,766,767],{},"With many modules, conventions matter more than cleverness. Clear naming and consistent structure made the codebase easy for the rest of the team to pick up.",[31,769,131],{"id":130},[133,771],{":images":772},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fcontag\u002Fc1.jpeg\",\"alt\":\"Back office\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fcontag\u002Fc2.jpeg\",\"alt\":\"App\"}]",{"title":137,"searchDepth":138,"depth":138,"links":774},[775,776,777,778,779,780,781],{"id":33,"depth":138,"text":34},{"id":48,"depth":138,"text":49},{"id":85,"depth":138,"text":86},{"id":92,"depth":138,"text":93},{"id":107,"depth":138,"text":108},{"id":118,"depth":138,"text":119},{"id":130,"depth":138,"text":131},"Backend · SaaS",{"team":784,"mine":785},"Product direction and the client apps were owned by the Contag team.","Backend API modules, following SOLID and clean-code practices.","\u002Fimages\u002Fwork\u002Fcontag\u002Fc2.jpeg","Backend API modules for a SaaS platform that manages university academic affairs.",[789],{"label":790,"url":791},"contag.id","https:\u002F\u002Fcontag.id\u002F",{},[794,797],{"value":795,"label":796},"20+","API modules delivered",{"value":798,"label":799},"800+","commits",4,"\u002Fprojects\u002Fcontag","Backend Engineer",{"title":702,"description":787},"projects\u002Fcontag",[736,806,807],"Node.js","TypeScript","Mar 2023 — Oct 2023","WcTN4sstj_gq9EjpdSrOhdQMQJJ2bZQ2AeqlGPMYfiE",{"id":811,"title":812,"architecture":813,"body":827,"category":903,"company":812,"contribution":904,"cover":907,"description":908,"draft":155,"extension":156,"featured":157,"links":909,"meta":916,"metrics":917,"navigation":157,"order":924,"path":925,"role":926,"seo":927,"stem":928,"technologies":929,"timeline":931,"type":183,"year":932,"__hash__":933},"projects\u002Fprojects\u002Fdigimosque.md","Digimosque",[814,818,821,823],{"id":815,"label":816,"detail":817},"android","Android app","Mosque discovery, donations, takmir features.",{"id":16,"label":819,"detail":820},"Laravel API","Includes the nearest-mosque search algorithm.",{"id":446,"label":716,"detail":822},"Redesigned to support new features while keeping legacy data.",{"id":824,"label":825,"detail":826},"admin","Livewire admin panel","Mosque data, IoT device access, takmir verification.",{"type":28,"value":828,"toc":894},[829,831,834,836,839,841,866,868,870,872,874,877,879,882,884,887],[31,830,34],{"id":33},[36,832,833],{},"Digimosque is a digital mosque platform: find mosques nearby, donate to religious activities, manage mosque cash \u002F infaq \u002F qurban, and connect IoT devices (displays, AC, prayer times). The Android prototype needed a real API, and administrators needed a web panel.",[31,835,42],{"id":41},[36,837,838],{},"The existing data had to be kept, so we reverse-engineered the old database and adjusted it for new features. The deadline was close.",[31,840,49],{"id":48},[51,842,843,850,857],{},[54,844,845,846,849],{},"Advised on the ",[57,847,848],{},"database redesign"," with the product manager.",[54,851,852,853,856],{},"Built the ",[57,854,855],{},"nearest-mosque search"," API and several other endpoints.",[54,858,852,859,862,863,865],{},[57,860,861],{},"entire admin panel"," with ",[57,864,489],{}," — reusable components made it possible to ship 15 modules in under two months.",[31,867,86],{"id":85},[88,869],{":nodes":85},[31,871,108],{"id":107},[110,873],{":metrics":112},[36,875,876],{},"The app is available on the Play Store.",[31,878,119],{"id":118},[36,880,881],{},"Picking a tool for the deadline, not for the résumé: Livewire let me reuse components and move fast without building a separate SPA.",[31,883,131],{"id":130},[133,885],{":images":886},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fdigimosque\u002Fdigi1.png\",\"alt\":\"Admin panel\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fdigimosque\u002Fdigi2.png\",\"alt\":\"Admin panel\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fdigimosque\u002Fdigi3.png\",\"alt\":\"Admin panel\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fdigimosque\u002Fdigi4.png\",\"alt\":\"Admin panel\"}]",[888,889],"iframe",{"src":890,"title":891,"loading":892,"allow":893,"allowFullScreen":157},"https:\u002F\u002Fwww.youtube-nocookie.com\u002Fembed\u002FuFxaXUciovo","DigiMosque Box & DigiMosque Mobile Apps","lazy","accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture",{"title":137,"searchDepth":138,"depth":138,"links":895},[896,897,898,899,900,901,902],{"id":33,"depth":138,"text":34},{"id":41,"depth":138,"text":42},{"id":48,"depth":138,"text":49},{"id":85,"depth":138,"text":86},{"id":107,"depth":138,"text":108},{"id":118,"depth":138,"text":119},{"id":130,"depth":138,"text":131},"Backend · Admin",{"team":905,"mine":906},"Built with two other developers; deployment support from the team.","Nearest-mosque search API and other endpoints, database redesign input, and the entire admin panel.","\u002Fimages\u002Fwork\u002Fdigimosque\u002Fdigi6.png","Nearest-mosque search API and a 15-module admin panel for a digital mosque platform.",[910,913],{"label":911,"url":912},"Company profile","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fdigimosque",{"label":914,"url":915},"Play Store","https:\u002F\u002Fplay.google.com\u002Fstore\u002Fsearch?q=digimosque&c=apps",{},[918,921],{"value":919,"label":920},"15","admin modules",{"value":922,"label":923},"\u003C 2 mo","to build the admin panel",5,"\u002Fprojects\u002Fdigimosque","Web Developer (Project based)",{"title":812,"description":908},"projects\u002Fdigimosque",[695,489,930],"REST API","Mar 2022 — May 2022",2022,"vINwFzdy38Uy6AKCxrO0Ot0QhBnurFYlar8KK1xZU1U",{"id":935,"title":936,"architecture":937,"body":954,"category":1044,"company":1045,"contribution":1046,"cover":1048,"description":1049,"draft":155,"extension":156,"featured":157,"links":1050,"meta":1051,"metrics":1052,"navigation":157,"order":1058,"path":1059,"role":1060,"seo":1061,"stem":1062,"technologies":1063,"timeline":1066,"type":183,"year":932,"__hash__":1067},"projects\u002Fprojects\u002Fjadwalin.md","Jadwalin",[938,942,946,950],{"id":939,"label":940,"detail":941},"excel","Excel exports from SIAK","Course data and sample schedules, since direct API access wasn't allowed.",{"id":943,"label":944,"detail":945},"import","Import & validation","Familiar Excel workflow for staff.",{"id":947,"label":948,"detail":949},"rules","Rule engine","Department, lecturer, room and credit-hour (SKS) constraints as Laravel rules.",{"id":951,"label":952,"detail":953},"generator","Greedy generator","Automatically proposes a conflict-free schedule.",{"type":28,"value":955,"toc":1035},[956,958,961,963,970,972,1017,1019,1021,1023,1025,1027,1030,1032],[31,957,34],{"id":33},[36,959,960],{},"The Faculty of Islamic Economics and Business at IAIN Sultan Amai Gorontalo needed to manage course schedules faculty-wide without clashes.",[31,962,42],{"id":41},[36,964,965,966,969],{},"Course data lived in the Academic Information System (SIAK), but API access was not permitted. What staff ",[124,967,968],{},"did"," have were Excel exports.",[31,971,49],{"id":48},[51,973,974,980,1010],{},[54,975,976,979],{},[57,977,978],{},"Excel-based import",", so staff keep the workflow they know and integration doesn't depend on SIAK access.",[54,981,982,983],{},"Four conflict rules, implemented as Laravel validation rules so new ones are easy to add:\n",[984,985,986,992,998,1004],"ol",{},[54,987,988,991],{},[57,989,990],{},"Department"," — a major's schedule may not collide.",[54,993,994,997],{},[57,995,996],{},"Lecturer"," — a lecturer can't teach two classes at once.",[54,999,1000,1003],{},[57,1001,1002],{},"Room"," — a room can't be double-booked.",[54,1005,1006,1009],{},[57,1007,1008],{},"Credits (SKS)"," — the course's credits must match the time slot.",[54,1011,1012,1013,1016],{},"An ",[57,1014,1015],{},"automatic schedule generator"," using a greedy algorithm.",[31,1018,86],{"id":85},[88,1020],{":nodes":85},[31,1022,108],{"id":107},[110,1024],{":metrics":112},[31,1026,119],{"id":118},[36,1028,1029],{},"When the ideal integration isn't available, meet users where their data already is. Excel import was less elegant than an API — and far more useful.",[31,1031,131],{"id":130},[133,1033],{":images":1034},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fjadwalin\u002Fjadwalin3.png\",\"alt\":\"Schedule overview\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fjadwalin\u002Fjadwalin1.png\",\"alt\":\"Schedule management\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fjadwalin\u002Fjadwalin2.png\",\"alt\":\"Schedule detail\"}]",{"title":137,"searchDepth":138,"depth":138,"links":1036},[1037,1038,1039,1040,1041,1042,1043],{"id":33,"depth":138,"text":34},{"id":41,"depth":138,"text":42},{"id":48,"depth":138,"text":49},{"id":85,"depth":138,"text":86},{"id":107,"depth":138,"text":108},{"id":118,"depth":138,"text":119},{"id":130,"depth":138,"text":131},"Product · Algorithm","IAIN Sultan Amai Gorontalo",{"mine":1047},"Sole developer — analysis, rules, generator and UI.","\u002Fimages\u002Fwork\u002Fjadwalin\u002Fjadwalin3.png","Faculty-scale course scheduling with conflict rules and a greedy auto-generator, fed by Excel exports instead of a locked API.",[],{},[1053,1055],{"value":321,"label":1054},"conflict rules enforced",{"value":1056,"label":1057},"2 mo","build time",6,"\u002Fprojects\u002Fjadwalin","Full-stack Developer",{"title":936,"description":1049},"projects\u002Fjadwalin",[695,1064,1065],"Greedy algorithm","Excel import","Apr 2022 — May 2022","Blf9BnXdC9KcjkqxNW-QkYQZ7s73cp7LKpUA-VXNW7c",{"id":1069,"title":1070,"architecture":1071,"body":1072,"category":1104,"company":1105,"contribution":1106,"cover":1109,"description":1110,"draft":155,"extension":156,"featured":155,"links":1111,"meta":1115,"metrics":1116,"navigation":157,"order":1120,"path":1121,"role":1122,"seo":1123,"stem":1124,"technologies":1125,"timeline":1127,"type":183,"year":184,"__hash__":1128},"projects\u002Fprojects\u002Fpanah-papua.md","Panah Papua",null,{"type":28,"value":1073,"toc":1098},[1074,1076,1079,1081,1089,1091,1093,1095],[31,1075,34],{"id":33},[36,1077,1078],{},"Panah Papua is an association of Papuan traditional land and forest defenders. They needed a clear, public map of the sago forests of West Papua to support conservation and sustainable land use.",[31,1080,49],{"id":48},[51,1082,1083,1086],{},[54,1084,1085],{},"An interdisciplinary approach with an urban-planner colleague, so the spatial data reflects real geographic features.",[54,1087,1088],{},"A user-friendly map page showing the distribution of sago forest, land cover and administrative coverage, with pop-up details.",[31,1090,108],{"id":107},[110,1092],{":metrics":112},[31,1094,131],{"id":130},[133,1096],{":images":1097},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fpanah-papua\u002Fpp1.jpeg\",\"alt\":\"Topology map\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fpanah-papua\u002Fpp2.jpeg\",\"alt\":\"Administrative coverage map\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fpanah-papua\u002Fpp3.jpeg\",\"alt\":\"Pop-up feature on the map\"}]",{"title":137,"searchDepth":138,"depth":138,"links":1099},[1100,1101,1102,1103],{"id":33,"depth":138,"text":34},{"id":48,"depth":138,"text":49},{"id":107,"depth":138,"text":108},{"id":130,"depth":138,"text":131},"Geo-web","Panah Papua (NGO)",{"team":1107,"mine":1108},"Geography and land-use interpretation came from an urban-planner colleague.","Map page development and spatial data preparation.","\u002Fimages\u002Fwork\u002Fpanah-papua\u002Fpp1.jpeg","A map page and spatial data for the sago forests of West Papua, built for an NGO protecting traditional land.",[1112],{"label":1113,"url":1114},"Live site","https:\u002F\u002Fpanah-papua.vercel.app\u002F",{},[1117],{"value":1118,"label":1119},"2 wk","delivery time",7,"\u002Fprojects\u002Fpanah-papua","Software Engineer & Spatial Data Analyst",{"title":1070,"description":1110},"projects\u002Fpanah-papua",[178,1126,181],"Web maps","Feb 2024 · 2 weeks","2LmpuY4kQOMQ2kGBWckqeF8os-vonAqxVL_dDKtiFrU",{"id":1130,"title":1131,"architecture":1071,"body":1132,"category":1278,"company":1279,"contribution":1071,"cover":1280,"description":1281,"draft":155,"extension":156,"featured":155,"links":1282,"meta":1285,"metrics":1286,"navigation":157,"order":1290,"path":1291,"role":1292,"seo":1293,"stem":1294,"technologies":1295,"timeline":1071,"type":183,"year":698,"__hash__":1297},"projects\u002Fprojects\u002Fsindasi.md","Sindasi",{"type":28,"value":1133,"toc":1272},[1134,1136,1139,1141,1158,1262,1264,1267,1269],[31,1135,34],{"id":33},[36,1137,1138],{},"Departments regularly need to pick suitable students — for scholarships, competitions, or research assistance — but criteria change from case to case.",[31,1140,49],{"id":48},[36,1142,1143,1145,1146,1149,1150,1153,1154,1157],{},[57,1144,1131],{}," combines complete student information (academic and non-academic) with a dynamic decision-support engine based on ",[57,1147,1148],{},"AHP"," (Analytical Hierarchy Process) and ",[57,1151,1152],{},"TOPSIS",". Users define criteria and pairwise comparisons, save them as ",[124,1155,1156],{},"preferences",", and generate recommendations from those preferences. Each recommendation can weigh criteria differently.",[528,1159,1160,1179],{},[531,1161,1162],{},[534,1163,1164,1166,1168,1171,1174,1177],{},[537,1165,539],{},[537,1167,996],{},[537,1169,1170],{},"Head of Dept.",[537,1172,1173],{},"Head of Program",[537,1175,1176],{},"Student",[537,1178,474],{},[551,1180,1181,1200,1217,1232,1247],{},[534,1182,1183,1186,1189,1192,1195,1198],{},[556,1184,1185],{},"Student list & profiles",[556,1187,1188],{},"Advisees",[556,1190,1191],{},"All",[556,1193,1194],{},"Program only",[556,1196,1197],{},"Own",[556,1199,1191],{},[534,1201,1202,1205,1208,1210,1212,1214],{},[556,1203,1204],{},"Criteria master",[556,1206,1207],{},"View",[556,1209,1207],{},[556,1211,1207],{},[556,1213,575],{},[556,1215,1216],{},"Full",[534,1218,1219,1222,1224,1226,1228,1230],{},[556,1220,1221],{},"Preference master",[556,1223,1197],{},[556,1225,1191],{},[556,1227,1197],{},[556,1229,575],{},[556,1231,1191],{},[534,1233,1234,1237,1239,1241,1243,1245],{},[556,1235,1236],{},"Auto recommendation",[556,1238,575],{},[556,1240,561],{},[556,1242,561],{},[556,1244,575],{},[556,1246,575],{},[534,1248,1249,1252,1254,1256,1258,1260],{},[556,1250,1251],{},"Import data",[556,1253,575],{},[556,1255,561],{},[556,1257,575],{},[556,1259,575],{},[556,1261,561],{},[31,1263,119],{"id":118},[36,1265,1266],{},"Making the weights configurable turned a one-off thesis tool into something reusable for many decisions.",[31,1268,131],{"id":130},[133,1270],{":images":1271},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fsindasi\u002Fsindasi1.png\",\"alt\":\"Dashboard\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fsindasi\u002Fsindasi2.png\",\"alt\":\"Recommendation\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fsindasi\u002Fsindasi3.png\",\"alt\":\"Student profile\"}]",{"title":137,"searchDepth":138,"depth":138,"links":1273},[1274,1275,1276,1277],{"id":33,"depth":138,"text":34},{"id":48,"depth":138,"text":49},{"id":118,"depth":138,"text":119},{"id":130,"depth":138,"text":131},"Decision Support","Universitas Negeri Gorontalo","\u002Fimages\u002Fwork\u002Fsindasi\u002Fsindasi1.png","A student information and recommendation system using AHP-TOPSIS with configurable criteria weights.",[1283],{"label":316,"url":1284},"https:\u002F\u002Fejurnal.ung.ac.id\u002Findex.php\u002Fjji\u002Farticle\u002Fview\u002F10246",{},[1287],{"value":1288,"label":1289},"5","user roles",8,"\u002Fprojects\u002Fsindasi","Full-stack Developer & Researcher (Undergraduate thesis)",{"title":1131,"description":1281},"projects\u002Fsindasi",[695,1296,447],"AHP-TOPSIS","mXe8GECnrf4F0uVtK0_JO3olcxf1XaBkgOgvwvmizDo",{"id":1299,"title":1300,"architecture":1071,"body":1301,"category":1332,"company":1071,"contribution":1071,"cover":1333,"description":1334,"draft":155,"extension":156,"featured":155,"links":1335,"meta":1336,"metrics":1337,"navigation":157,"order":1338,"path":1339,"role":1340,"seo":1341,"stem":1342,"technologies":1343,"timeline":1071,"type":183,"year":1345,"__hash__":1346},"projects\u002Fprojects\u002Fkongkong.md","Kongkong",{"type":28,"value":1302,"toc":1327},[1303,1305,1312,1314,1322,1324],[31,1304,34],{"id":33},[36,1306,1307,1308,1311],{},"Students raising money for activities usually pass around a list of donors with little information about the activity itself. The idea: an alternative funding source that explains ",[124,1309,1310],{},"what"," is being funded.",[31,1313,49],{"id":48},[36,1315,1316,1317,1321],{},"I built the interface from scratch with Bootstrap — no template — following mobile-first principles, since students mostly use their phones. See the ",[279,1318,1320],{"href":1319},"\u002Fwork\u002Fkongkong-interface","interface design case"," for the UI details.",[31,1323,131],{"id":130},[133,1325],{":images":1326},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong\u002Fkongkong1.png\",\"alt\":\"Home\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong\u002Fkongkong2.png\",\"alt\":\"Campaign\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong\u002Fkongkong3.png\",\"alt\":\"Campaign detail\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong\u002Fkongkong4.png\",\"alt\":\"Profile\"}]",{"title":137,"searchDepth":138,"depth":138,"links":1328},[1329,1330,1331],{"id":33,"depth":138,"text":34},{"id":48,"depth":138,"text":49},{"id":130,"depth":138,"text":131},"Full-stack · Practice project","\u002Fimages\u002Fwork\u002Fkongkong\u002Fkongkong1.png","A mobile-first crowdfunding platform for student activities.",[],{},[],9,"\u002Fprojects\u002Fkongkong","Front-end Developer",{"title":1300,"description":1334},"projects\u002Fkongkong",[695,1344,696],"Bootstrap",2020,"Mzo_hs2ez7s4X1eCGjfB5nKYMzu6fqVn1Aj8ceVV5kA",{"id":1348,"title":1349,"architecture":1071,"body":1350,"category":1417,"company":1418,"contribution":1071,"cover":1419,"description":1420,"draft":155,"extension":156,"featured":155,"links":1421,"meta":1425,"metrics":1426,"navigation":157,"order":1432,"path":1433,"role":1434,"seo":1435,"stem":1436,"technologies":1437,"timeline":1441,"type":183,"year":340,"__hash__":1442},"projects\u002Fprojects\u002Fipb-summer-2023.md","Melon Leaf Clustering",{"type":28,"value":1351,"toc":1411},[1352,1354,1357,1359,1391,1393,1395,1406,1408],[31,1353,34],{"id":33},[36,1355,1356],{},"At the International Summer Course on AI and Optimization for Smart Agriculture (IPB, Oct 2023), our team explored whether melon leaf images could be grouped automatically to support disease diagnosis and crop management.",[31,1358,49],{"id":48},[51,1360,1361,1367,1374,1384],{},[54,1362,1363,1364,285],{},"Extracted texture features with the ",[57,1365,1366],{},"gray-level co-occurrence matrix (GLCM)",[54,1368,1369,1370,1373],{},"Clustered images with ",[57,1371,1372],{},"K-Means"," (scikit-learn, OpenCV for pre-processing).",[54,1375,1376,1377,471,1380,1383],{},"Chose the number of clusters with ",[57,1378,1379],{},"SSE",[57,1381,1382],{},"silhouette score"," — useful values ranged 3–6; we used 6 because it gave the most information to plant experts.",[54,1385,1386,1387,1390],{},"Reviewed clusters ",[57,1388,1389],{},"with plant experts",": they mapped to diseased leaves, nutrient deficiencies, healthy plants, and similar-symptom groups.",[31,1392,108],{"id":107},[110,1394],{":metrics":112},[36,1396,1397,1398,1401,1402,1405],{},"Our team won ",[57,1399,1400],{},"Best Team",", and I received the ",[57,1403,1404],{},"Best Local Participant"," award.",[31,1407,131],{"id":130},[133,1409],{":images":1410},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fipb-summer-2023\u002F2.jpeg\",\"alt\":\"Clusters\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fipb-summer-2023\u002F1.jpeg\",\"alt\":\"Cluster plot\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fipb-summer-2023\u002F3.jpeg\",\"alt\":\"SSE score\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fipb-summer-2023\u002F4.jpeg\",\"alt\":\"Silhouette score\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fipb-summer-2023\u002F5.jpeg\",\"alt\":\"Team presentation\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fipb-summer-2023\u002F6.jpg\",\"alt\":\"Award\"}]",{"title":137,"searchDepth":138,"depth":138,"links":1412},[1413,1414,1415,1416],{"id":33,"depth":138,"text":34},{"id":48,"depth":138,"text":49},{"id":107,"depth":138,"text":108},{"id":130,"depth":138,"text":131},"AI · Machine Learning","IPB International Summer Course","\u002Fimages\u002Fwork\u002Fipb-summer-2023\u002F1.jpeg","Unsupervised clustering of melon leaf images with K-Means and GLCM texture features — Best Team at the IPB International Summer Course.",[1422],{"label":1423,"url":1424},"About the course","https:\u002F\u002Fcsagri23.apps.cs.ipb.ac.id\u002F",{},[1427,1430],{"value":1428,"label":1429},"6","clusters validated with plant experts",{"value":1400,"label":1431},"award",10,"\u002Fprojects\u002Fipb-summer-2023","Machine Learning Engineer",{"title":1349,"description":1420},"projects\u002Fipb-summer-2023",[178,1438,1439,1372,1440],"scikit-learn","OpenCV","GLCM","8–20 Oct 2023","fXpo1U7vAfKf_tX5srQv5lazfC582iY60Mfp4mrxcXg",{"id":1444,"title":1445,"architecture":1071,"body":1446,"category":1539,"company":1540,"contribution":1071,"cover":1475,"description":1541,"draft":155,"extension":156,"featured":155,"links":1542,"meta":1543,"metrics":1544,"navigation":157,"order":1545,"path":1546,"role":1547,"seo":1548,"stem":1549,"technologies":1550,"timeline":1071,"type":1555,"year":698,"__hash__":1556},"projects\u002Fprojects\u002Fgenbi-branding.md","GenBI Gorontalo Branding",{"type":28,"value":1447,"toc":1535},[1448,1452,1455,1457,1460,1466,1469,1476,1479,1523,1529,1532],[31,1449,1451],{"id":1450},"brief","Brief",[36,1453,1454],{},"Present GenBI as a community with a clear vision and a directed target, with a design that is easy to remember — a first step toward the 2025 target, starting from internal management and GenBI Gorontalo's social-media presence.",[31,1456,49],{"id":48},[36,1458,1459],{},"The 2025 vision and values were formulated as:",[1461,1462,1463],"blockquote",{},[36,1464,1465],{},"\"Becoming the best new generation of Indonesia in Sulawesi, holding the values of kinship, mutual protection, determination, professionalism, and activeness (KESATRIA).\"",[36,1467,1468],{},"That vision became a logo, repeated across GenBI Gorontalo posts as a reminder.",[36,1470,1471],{},[1472,1473],"img",{"alt":1474,"src":1475},"Community vision logo","\u002Fimages\u002Fwork\u002Fgenbi-branding\u002Flogo-visi-kesatria-2025.png",[36,1477,1478],{},"Each division also received its own symbol:",[984,1480,1481,1487,1493,1499,1505,1511,1517],{},[54,1482,1483,1486],{},[57,1484,1485],{},"Core Management"," — a dot with a line piercing the circle: a connector that breaks through every obstacle toward the goal.",[54,1488,1489,1492],{},[57,1490,1491],{},"Entrepreneurship"," — dots and lines shaped like people helping each other.",[54,1494,1495,1498],{},[57,1496,1497],{},"Religion and Education"," — a shape representing guidance and knowledge.",[54,1500,1501,1504],{},[57,1502,1503],{},"Public Health"," — a dot inside a circle: care and protection.",[54,1506,1507,1510],{},[57,1508,1509],{},"Environment"," — a small leaf with root-like lines: cleanliness and freshness.",[54,1512,1513,1516],{},[57,1514,1515],{},"Organization and Membership"," — a dot with one line piercing the circle, embracing members and removing partitions.",[54,1518,1519,1522],{},[57,1520,1521],{},"Cooperation and Partnership"," — fast-flowing water: the spirit to explore, the spearhead of external relations.",[36,1524,1525],{},[1472,1526],{"alt":1527,"src":1528},"Division symbols","\u002Fimages\u002Fwork\u002Fgenbi-branding\u002Fsimbol-bidang-departemen.png",[36,1530,1531],{},"All of it was applied across activity templates and infographics.",[133,1533],{":images":1534},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fgenbi-branding\u002Ftemplate-feed-instagram.png\",\"alt\":\"Instagram feed template\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fgenbi-branding\u002Fdesain-struktur-organisasi.png\",\"alt\":\"Organization structure design\"}]",{"title":137,"searchDepth":138,"depth":138,"links":1536},[1537,1538],{"id":1450,"depth":138,"text":1451},{"id":48,"depth":138,"text":49},"Brand identity","GenBI Gorontalo","A vision logo, seven division symbols and social templates that gave a scholarship community a clear, memorable identity.",[],{},[],20,"\u002Fprojects\u002Fgenbi-branding","Designer & Chairman",{"title":1445,"description":1541},"projects\u002Fgenbi-branding",[1551,1552,1553,1554],"Branding","Logo","Iconography","Social media","design","c4rvScuZne0086Ei9QlZjNbt63GPqJbSJoKah6Ff1Ug",{"id":1558,"title":1559,"architecture":1071,"body":1560,"category":1552,"company":1586,"contribution":1071,"cover":1581,"description":1587,"draft":155,"extension":156,"featured":155,"links":1588,"meta":1589,"metrics":1590,"navigation":157,"order":1591,"path":1592,"role":1593,"seo":1594,"stem":1595,"technologies":1596,"timeline":1071,"type":1555,"year":1598,"__hash__":1599},"projects\u002Fprojects\u002Fhexstudio-logo.md","HEXSTUDIO Logo",{"type":28,"value":1561,"toc":1582},[1562,1564,1567,1569,1576],[31,1563,1451],{"id":1450},[36,1565,1566],{},"A studio logo that is modern yet friendly, and signals design expertise.",[31,1568,49],{"id":48},[36,1570,1571,1572,1575],{},"Negative space forms the word ",[57,1573,1574],{},"HEX",". The palette comes from the three primaries of digital design — red, green and blue — signalling an understanding of design fundamentals. The tones are calm rather than bright, to keep the impression friendly.",[36,1577,1578],{},[1472,1579],{"alt":1580,"src":1581},"HEXSTUDIO logo","\u002Fimages\u002Fwork\u002Fhexstudio-logo\u002Flogo-hexstudio.png",{"title":137,"searchDepth":138,"depth":138,"links":1583},[1584,1585],{"id":1450,"depth":138,"text":1451},{"id":48,"depth":138,"text":49},"HEXSTUDIO","Negative space that spells HEX, colored with calm RGB primaries.",[],{},[],21,"\u002Fprojects\u002Fhexstudio-logo","Designer",{"title":1559,"description":1587},"projects\u002Fhexstudio-logo",[1552,1551,1597],"Negative space",2019,"epNm9UKnEEuUA4m_JcHVzbcmf1tf0Q21ZfcXSuZYLaw",{"id":1601,"title":1602,"architecture":1071,"body":1603,"category":1552,"company":1629,"contribution":1071,"cover":1624,"description":1630,"draft":155,"extension":156,"featured":155,"links":1631,"meta":1632,"metrics":1633,"navigation":157,"order":1634,"path":1635,"role":1593,"seo":1636,"stem":1637,"technologies":1638,"timeline":1071,"type":1555,"year":1598,"__hash__":1640},"projects\u002Fprojects\u002Fkatili-corp-logo.md","Katili Corp Logo",{"type":28,"value":1604,"toc":1625},[1605,1607,1610,1612,1619],[31,1606,1451],{"id":1450},[36,1608,1609],{},"A modern, minimalist logo that also tells the history of a company founded through a student's hard work.",[31,1611,49],{"id":48},[36,1613,1614,1615,1618],{},"The mark is built on the ",[57,1616,1617],{},"golden ratio"," (1.618), so every angle and plane stays balanced — that is the \"modern and minimalist\". Its shape is a bag being dragged; behind it, a tail of wind forms a Fibonacci curve. The bag is the student; the curve is every struggle, turned into a beautiful stroke.",[36,1620,1621],{},[1472,1622],{"alt":1623,"src":1624},"Katili Corp logo explanation","\u002Fimages\u002Fwork\u002Fkatili-corp-logo\u002Flogo-katili-corp.png",{"title":137,"searchDepth":138,"depth":138,"links":1626},[1627,1628],{"id":1450,"depth":138,"text":1451},{"id":48,"depth":138,"text":49},"Katili Corp","A golden-ratio mark that tells the story of a company built by a student's hard work.",[],{},[],22,"\u002Fprojects\u002Fkatili-corp-logo",{"title":1602,"description":1630},"projects\u002Fkatili-corp-logo",[1552,1639],"Golden ratio","KUPpZ6_F5jMAR9xPkA44VaMLHthKttwYgX6EhK3k0Hw",{"id":1642,"title":1643,"architecture":1071,"body":1644,"category":1552,"company":1670,"contribution":1071,"cover":1665,"description":1671,"draft":155,"extension":156,"featured":155,"links":1672,"meta":1673,"metrics":1674,"navigation":157,"order":1675,"path":1676,"role":1593,"seo":1677,"stem":1678,"technologies":1679,"timeline":1071,"type":1555,"year":1598,"__hash__":1681},"projects\u002Fprojects\u002Fkotaluwuk-logo.md","Kotaluwuk.com Logo",{"type":28,"value":1645,"toc":1666},[1646,1648,1651,1653,1660],[31,1647,1451],{"id":1450},[36,1649,1650],{},"A modern, minimalist logo for a tourism website, using Luwuk's icon — the maleo bird.",[31,1652,49],{"id":48},[36,1654,1655,1656,1659],{},"A maleo bird in front of a sun and clouds. The clouds sit ",[124,1657,1658],{},"below"," the bird, so it appears to fly high — Luwuk is not only beautiful, but also wise and advanced.",[36,1661,1662],{},[1472,1663],{"alt":1664,"src":1665},"Kotaluwuk.com logo","\u002Fimages\u002Fwork\u002Fkotaluwuk-logo\u002Flogo-kotaluwuk.png",{"title":137,"searchDepth":138,"depth":138,"links":1667},[1668,1669],{"id":1450,"depth":138,"text":1451},{"id":48,"depth":138,"text":49},"Kotaluwuk.com","A maleo bird flying above the clouds for a tourism website from Luwuk.",[],{},[],23,"\u002Fprojects\u002Fkotaluwuk-logo",{"title":1643,"description":1671},"projects\u002Fkotaluwuk-logo",[1552,1551,1680],"Tourism","HKfRojp94ayPL53R22gpoPeYXZQvcqTUwjFBV9iVH-A",{"id":1683,"title":1684,"architecture":1071,"body":1685,"category":1708,"company":1071,"contribution":1071,"cover":1709,"description":1710,"draft":155,"extension":156,"featured":155,"links":1711,"meta":1712,"metrics":1713,"navigation":157,"order":1714,"path":1715,"role":1716,"seo":1717,"stem":1718,"technologies":1719,"timeline":1071,"type":1555,"year":1345,"__hash__":1723},"projects\u002Fprojects\u002Fkongkong-interface.md","Kongkong Interface",{"type":28,"value":1686,"toc":1704},[1687,1689,1692,1694,1701],[31,1688,1451],{"id":1450},[36,1690,1691],{},"An interface for students: flexible, responsive, and able to show activities run by students and student organizations.",[31,1693,49],{"id":48},[36,1695,1696,1697,285],{},"Built from scratch with Bootstrap — no template — prioritising the mobile layout, since phones are what students use most. The engineering side is in the ",[279,1698,1700],{"href":1699},"\u002Fwork\u002Fkongkong","Kongkong project",[133,1702],{":images":1703},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong-interface\u002Findex-desktop.png\",\"alt\":\"Index page\",\"desktop\":null},{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong-interface\u002Findex-mobile.png\",\"alt\":\"Index page\",\"mobile\":null},{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong-interface\u002Fprofil-desktop.png\",\"alt\":\"Profile page\",\"desktop\":null},{\"src\":\"\u002Fimages\u002Fwork\u002Fkongkong-interface\u002Fprofil-mobile.png\",\"alt\":\"Profile page\",\"mobile\":null}]",{"title":137,"searchDepth":138,"depth":138,"links":1705},[1706,1707],{"id":1450,"depth":138,"text":1451},{"id":48,"depth":138,"text":49},"UI design","\u002Fimages\u002Fwork\u002Fkongkong-interface\u002Findex-desktop.png","A responsive, mobile-first interface for a student crowdfunding platform.",[],{},[],24,"\u002Fprojects\u002Fkongkong-interface","UI Designer",{"title":1684,"description":1710},"projects\u002Fkongkong-interface",[1720,1344,1721,1722],"Interface","Responsive","Mobile first","IuXOokCbyR3t1QhzM-rdj4RxKglbp7UsYLdAMsCByvI",{"id":1725,"title":1726,"architecture":1071,"body":1727,"category":1737,"company":1071,"contribution":1071,"cover":1738,"description":1739,"draft":155,"extension":156,"featured":155,"links":1740,"meta":1741,"metrics":1742,"navigation":157,"order":1743,"path":1744,"role":1745,"seo":1746,"stem":1747,"technologies":1748,"timeline":1071,"type":1555,"year":1751,"__hash__":1752},"projects\u002Fprojects\u002Fdigital-art.md","Digital Art",{"type":28,"value":1728,"toc":1735},[1729,1732],[36,1730,1731],{},"A collection of personal illustration work.",[133,1733],{":images":1734},"[{\"src\":\"\u002Fimages\u002Fwork\u002Fdigital-art\u002Fdigital-art-1.png\",\"alt\":\"Digital illustration 1\"},{\"src\":\"\u002Fimages\u002Fwork\u002Fdigital-art\u002Fdigital-art-2.png\",\"alt\":\"Digital illustration 2\"}]",{"title":137,"searchDepth":138,"depth":138,"links":1736},[],"Illustration","\u002Fimages\u002Fwork\u002Fdigital-art\u002Fdigital-art-1.png","Digital painting and vector illustration, shown without commentary.",[],{},[],25,"\u002Fprojects\u002Fdigital-art","Illustrator",{"title":1726,"description":1739},"projects\u002Fdigital-art",[1749,1750],"Digital painting","Vector",2018,"XL80KXQe_0zdAb7sx1Tewoo8ARGWv83YundyuvcuL44",1790853656204]