[{"data":1,"prerenderedAt":715},["ShallowReactive",2],{"projects-page-en":3,"projects-en":21},{"id":4,"title":5,"body":6,"description":7,"extension":8,"links":9,"meta":14,"navigation":15,"path":16,"seo":17,"stem":19,"__hash__":20},"projectsPage_en\u002Fprojects\u002Fen\u002Fprojects.yml","Case studies",null,"Company sites and custom business software we have shipped for clients in Indonesia.","yml",[10],{"label":11,"color":12,"to":13},"Start a project","primary","#contact",{},true,"\u002Fprojects\u002Fen\u002Fprojects",{"title":5,"description":18},"Client work from Harten Digital. Websites, search visibility, and custom software for operators in Indonesia.","projects\u002Fen\u002Fprojects","-Wyq3-6-MA-wKWm6o0s_6HAXLSj2f0CMo7VAdLpJt1Q",[22,101,163,220,285,347,414,475,538,593,655],{"id":23,"title":24,"body":25,"client":77,"description":78,"extension":79,"features":80,"gallery":6,"galleryTall":6,"image":87,"meta":88,"navigation":15,"notes":89,"path":90,"role":91,"seo":92,"stack":93,"stem":98,"year":99,"__hash__":100},"projects_en\u002Fprojects\u002Ffarmora.md","Farmora",{"type":26,"value":27,"toc":70},"minimark",[28,42,47,50,54,57,60,63,67],[29,30,31,32,37,38,41],"p",{},"The drugstore app next to ",[33,34,36],"a",{"href":35},"\u002Fprojects\u002Fprima","Prima",". Prima is the distributor. ",[39,40,24],"strong",{}," is the toko obat side: products, customers, vendors, stores, users, sales, purchases. Same company group. Different counters.",[43,44,46],"h2",{"id":45},"what-they-needed","What they needed",[29,48,49],{},"A distributor system does not help the person at the apotek counter. They need to sell, buy, print a receipt, and see the same product list as the other branch. Without fighting over whose spreadsheet is right.",[43,51,53],{"id":52},"what-they-got","What they got",[29,55,56],{},"One catalog across stores. Sales and purchases. Barcode. Print that hits the shop printer, not a “save as PDF” dance. Accounts so each store is not sharing one password.",[29,58,59],{},"This is the current inventory line. Operators get a screen they can stand in front of all day.",[29,61,62],{},"The cover is a stand-in until we drop live shots in.",[43,64,66],{"id":65},"if-this-is-you","If this is you",[29,68,69],{},"Several shops, one product list, printers that have to work. If your branches share a catalog and fight over stock numbers, this is the shape we are shipping now.",{"title":71,"searchDepth":72,"depth":72,"links":73},"",2,[74,75,76],{"id":45,"depth":72,"text":46},{"id":52,"depth":72,"text":53},{"id":65,"depth":72,"text":66},"PT Kem Kem Primahusada","Multi-branch drugstore inventory. Sales, purchases, products, print. The shop-floor side of a pharmacy group.","md",[81,82,83,84,85,86],"Several stores on one catalog","Products, customers, and vendors","Sales and purchases at the counter","Barcode on the product","Receipts on the shop printer","Separate logins per store","\u002Fprojects\u002Ffarmora.svg",{},"Next.js UI on a .NET API. SignalR when the screen needs to update live. Barcode and PDF on the client. A tray app and print agent so the shop printer is not a browser dialog. PostgreSQL.","\u002Fprojects\u002Ffarmora","custom",{"title":24,"description":78},[94,95,96,97],".NET","C#","Next.js","PostgreSQL","projects\u002Ffarmora",2026,"SgRYkzUDk1QJMtUxpSGGLnNQI0Fj2JDO8al0wYacaWY",{"id":102,"title":103,"body":104,"client":103,"description":144,"extension":79,"features":145,"gallery":6,"galleryTall":6,"image":152,"meta":153,"navigation":15,"notes":154,"path":155,"role":91,"seo":156,"stack":157,"stem":160,"year":161,"__hash__":162},"projects_en\u002Fprojects\u002Farbitro.md","Arbitro",{"type":26,"value":105,"toc":139},[106,109,112,116,127,131,134,136],[29,107,108],{},"Arbitrage windows do not sit around. Prices on Indodax drift away from Binance, Bybit, Gate.io, and MEXC, then snap back. If you are refreshing five tabs, you already missed it.",[29,110,111],{},"Arbitro is one screen that watches all five and shows a buy\u002Fsell gap the moment it shows up.",[43,113,115],{"id":114},"why-it-exists","Why it exists",[29,117,118,119,123,124,126],{},"Traders wanted local vs international routes on one dashboard, filtered to ",[120,121,122],"em",{},"their"," volume floor and ",[120,125,122],{}," coin list. And they did not want exchange keys or the trading machine treated like a side note.",[43,128,130],{"id":129},"how-they-use-it","How they use it",[29,132,133],{},"Each person gets both directions: buy local \u002F sell international, and the reverse. Their own minimum volume and coin list do the filtering. The live view is color-coded. Everyone else can wait.",[43,135,66],{"id":65},[29,137,138],{},"You trade across a local exchange and the big international ones. You care about the gap you can actually fill, not a pretty number on a tiny clip.",{"title":71,"searchDepth":72,"depth":72,"links":140},[141,142,143],{"id":114,"depth":72,"text":115},{"id":129,"depth":72,"text":130},{"id":65,"depth":72,"text":66},"One screen watching Indodax, Binance, Bybit, Gate.io, and MEXC. Live buy\u002Fsell gaps, with login security and locked-down exchange keys.",[146,147,148,149,150,151],"Five exchanges on one dashboard","Live buy\u002Fsell gap as soon as it appears","Filter by your volume floor and coin list","Both directions (local vs international)","Login with 2FA","Exchange API keys stored locked down","\u002Fprojects\u002Farbitro.svg",{},".NET 10 backend, SignalR snapshots to a React dashboard. 2FA on AuthEndpoints. API credentials extra-protected at rest. Trading VPS behind Caddy and Docker. Moving the engine from best-bid\u002Fask (BBA) to VWAP.","\u002Fprojects\u002Farbitro",{"title":103,"description":144},[94,95,158,159,97],"SignalR","React","projects\u002Farbitro",2025,"yVLREC2A-hyGaIQaLT2F6zqN4FxfSgquQdN9drIXN5w",{"id":164,"title":165,"body":166,"client":201,"description":202,"extension":79,"features":203,"gallery":6,"galleryTall":6,"image":210,"meta":211,"navigation":15,"notes":212,"path":213,"role":214,"seo":215,"stack":216,"stem":218,"year":161,"__hash__":219},"projects_en\u002Fprojects\u002Fautro.md","Autro",{"type":26,"value":167,"toc":197},[168,185,189,192,194],[29,169,170,172,173,179,180,184],{},[39,171,165],{}," is our own spare-parts system, live at ",[33,174,178],{"href":175,"rel":176},"https:\u002F\u002Fautro.cloud",[177],"nofollow","autro.cloud",". ",[33,181,183],{"href":182},"\u002Fprojects\u002Fdaci-motor","Daci Motor"," proved the domain: messy product codes, bins, purchases, sales. Autro is the next line. A shop face the public can use, and an admin behind it for catalog and ops. First commit October 2025.",[43,186,188],{"id":187},"what-it-is","What it is",[29,190,191],{},"A product, not a one-off. The live site is the shop face: part-number search, categories, WhatsApp stock check, two Samarinda counters. Same job as a parts counter, built so the next shop does not need a custom rebuild.",[43,193,66],{"id":65},[29,195,196],{},"You run auto parts. You liked Daci. You want something we can put another shop on, instead of starting from zero each time.",{"title":71,"searchDepth":72,"depth":72,"links":198},[199,200],{"id":187,"depth":72,"text":188},{"id":65,"depth":72,"text":66},"Harten Digital","Our spare-parts platform, live at autro.cloud. Same job as Daci Motor, sold as a product a shop can run.",[204,205,206,207,208,209],"Public storefront","Search by part number","Browse by category","Stock check via WhatsApp","Two Samarinda shop locations","Admin for catalog and day-to-day ops","\u002Fprojects\u002Fautro.svg",{},"Nuxt admin, .NET API, PostgreSQL. Public landing a shop can actually run. First commit October 2025.","\u002Fprojects\u002Fautro","product",{"title":165,"description":202},[94,95,217,97],"Nuxt","projects\u002Fautro","NBG2hsaxnIb6TIlxonfabpEPcPRM-xL4sDBvgIGVThc",{"id":221,"title":183,"body":222,"client":229,"description":258,"extension":79,"features":259,"gallery":267,"galleryTall":6,"image":268,"meta":275,"navigation":15,"notes":276,"path":182,"role":91,"seo":277,"stack":278,"stem":283,"year":161,"__hash__":284},"projects_en\u002Fprojects\u002Fdaci-motor.md",{"type":26,"value":223,"toc":253},[224,235,237,240,242,245,248,250],[29,225,226,227,230,231,234],{},"Parts inventory for ",[39,228,229],{},"Cahaya Gemilang Motor"," (Daci Motor). Kampas rem Hino Dutro, V-belts, engine mounting. Location codes like BB3 and ",[120,232,233],{},"gudang belakang",". 2,855 products in the April 2025 list. This is a counter business, not a boutique catalog.",[43,236,46],{"id":45},[29,238,239],{},"Stock lived in heads and notebooks. Part numbers collide. The same kampas rem sits in two bins. Purchasing and sales did not talk to each other. They needed a system the person at the counter can open all day, not a demo that looks tidy for an hour.",[43,241,53],{"id":52},[29,243,244],{},"A dark dashboard with today’s revenue, month totals, a 12-month chart. Products with part number, qty, unit, price, bin location. Brands, categories, vendors, purchases, customers, stock opname. Payments online. Excel in and out for the product list.",[29,246,247],{},"We started the line in 2022. The screenshots are the 2025 screens operators actually open: dashboard on 21 May, product table in late April.",[43,249,66],{"id":65},[29,251,252],{},"Spare parts, messy product codes, a warehouse that is also a shop. This is what “put it in a system” looks like after a few years of use, not after a demo day.",{"title":71,"searchDepth":72,"depth":72,"links":254},[255,256,257],{"id":45,"depth":72,"text":46},{"id":52,"depth":72,"text":53},{"id":65,"depth":72,"text":66},"Inventory for a car and truck parts counter. 2,800+ products, warehouse locations, purchasing, sales, and stock counts.",[260,261,262,263,264,265,266],"Daily and monthly sales on one dashboard","2,800+ products with part numbers and rack locations","Purchases from vendors","Counter sales","Stock opname","Excel import and export","Online payment (cards, transfer, e-wallets)",[268,269,270,271,272,273,274],"\u002Fimages\u002Fprojects\u002Fdaci-motor\u002Fchrome_2025-05-21_14-25-02.jpg","\u002Fimages\u002Fprojects\u002Fdaci-motor\u002Fchrome_2025-05-21_14-25-44.jpg","\u002Fimages\u002Fprojects\u002Fdaci-motor\u002Fchrome_2025-04-26_15-48-43.jpg","\u002Fimages\u002Fprojects\u002Fdaci-motor\u002Fchrome_2025-04-25_13-21-06.jpg","\u002Fimages\u002Fprojects\u002Fdaci-motor\u002Fchrome_2025-04-28_15-46-20.jpg","\u002Fimages\u002Fprojects\u002Fdaci-motor\u002Fchrome_2025-05-10_15-47-32.jpg","\u002Fimages\u002Fprojects\u002Fdaci-motor\u002Fchrome_2025-05-20_17-09-25.jpg",{},"Custom admin (Django + Unfold). Payments through Midtrans. Product lists import and export as Excel (pandas).",{"title":183,"description":258},[279,280,281,282],"Django","Unfold","Midtrans","pandas","projects\u002Fdaci-motor","iCCAUubH4wlobjcAbBEkGc56L3_yeWidZ0pvq-k8C14",{"id":286,"title":287,"body":288,"client":77,"description":328,"extension":79,"features":329,"gallery":336,"galleryTall":6,"image":337,"meta":340,"navigation":15,"notes":341,"path":35,"role":91,"seo":342,"stack":343,"stem":344,"year":345,"__hash__":346},"projects_en\u002Fprojects\u002Fprima.md","Prima Pharmacy Suite",{"type":26,"value":289,"toc":323},[290,296,300,307,309,312,318,320],[29,291,292,293,295],{},"Inventory and billing for ",[39,294,77],{},", a pharmaceutical distributor in Samarinda. PBF license, CDOB, NPWP on the invoice header. This is not a generic stock app. If the paper is wrong, the next audit is a problem.",[43,297,299],{"id":298},"the-problem","The problem",[29,301,302,303,306],{},"Accounting, stock, and invoices still lived in spreadsheets. Fine until volume went up. Batch numbers drifted. Expiry dates hid in a column nobody opened. Pharmacies downstream needed a proper ",[120,304,305],{},"faktur penjualan",", not a WhatsApp photo of a notebook.",[43,308,53],{"id":52},[29,310,311],{},"Sales with customer, paid status, and a print-ready invoice: product code, name, expiry, batch, qty, price, discount, PPN 11%. Filters by month and payment. The 2024 screenshots are those invoices. The 2025 shot is the sales list operators actually live in.",[29,313,314,315,317],{},"The drugstore-side app is a separate product. See ",[33,316,24],{"href":90},". Distributors and shop floors do not share a screen. They share the need for numbers that match.",[43,319,66],{"id":65},[29,321,322],{},"Regulated goods. Batch and expiry are not optional. Printable invoices with tax. If you distribute anything BPOM cares about, this is the kind of system we already ran.",{"title":71,"searchDepth":72,"depth":72,"links":324},[325,326,327],{"id":298,"depth":72,"text":299},{"id":52,"depth":72,"text":53},{"id":65,"depth":72,"text":66},"Distributor inventory for a licensed drug wholesaler. Batch, expiry, invoicing, and reports that hold up in a BPOM audit.",[330,331,332,333,334,335],"Batch number and expiry on every line","Printable sales invoices (faktur) with PPN 11%","Paid \u002F unpaid status","Filter by month and payment","Customer list","License and NPWP on the invoice header",[337,338,339],"\u002Fimages\u002Fprojects\u002Fprima\u002Fchrome_2025-08-06_12-32-28.jpg","\u002Fimages\u002Fprojects\u002Fprima\u002Fchrome_2024-07-03_15-36-24.jpg","\u002Fimages\u002Fprojects\u002Fprima\u002Fchrome_2024-07-03_15-37-57.jpg",{},"Django admin on PostgreSQL. Invoice lines include product code, name, expiry, batch, qty, price, discount, PPN.",{"title":287,"description":328},[279,97],"projects\u002Fprima",2024,"hvE9_zJvVyRbhCb5FoKwJTDVYPAqn6a7fk14_0kuOpE",{"id":348,"title":349,"body":350,"client":349,"description":389,"extension":79,"features":390,"gallery":396,"galleryTall":400,"image":397,"meta":404,"navigation":15,"notes":405,"path":406,"role":407,"seo":408,"stack":409,"stem":412,"year":345,"__hash__":413},"projects_en\u002Fprojects\u002Fnasionalrubber.md","PT Nasional Bhirawa Tama",{"type":26,"value":351,"toc":384},[352,364,368,371,373,376,379,381],[29,353,354,355,357,358,363],{},"Bilingual company profile for ",[39,356,349],{},", a rubber company since 1955. Live at ",[33,359,362],{"href":360,"rel":361},"https:\u002F\u002Fnasionalrubber.co.id",[177],"nasionalrubber.co.id",".",[43,365,367],{"id":366},"two-markets-one-address","Two markets, one address",[29,369,370],{},"They sell locally and overseas. A Bahasa-only site cuts off buyers who do not read it. English-only does the same the other way. The catalog also had to be easy to scan. Not a PDF graveyard.",[43,372,53],{"id":52},[29,374,375],{},"Same pages, same products, a language switch. Dark, quiet layout on purpose. This is a manufacturer profile, not a campaign microsite.",[29,377,378],{},"Screenshots from March and October 2024 are the build. The 2025 shot is the site as it sits now.",[43,380,66],{"id":65},[29,382,383],{},"Exporter, two languages, a product range that has to look serious. If that is your shape, this is a close match.",{"title":71,"searchDepth":72,"depth":72,"links":385},[386,387,388],{"id":366,"depth":72,"text":367},{"id":52,"depth":72,"text":53},{"id":65,"depth":72,"text":66},"Bilingual company site for a rubber manufacturer selling in Indonesia and overseas. Same catalog, English and Bahasa.",[391,392,393,394,395],"English and Indonesian on one site","Language switch","Product catalog that is easy to scan","Contact form","Dark, quiet manufacturer look",[397,398,399],"\u002Fimages\u002Fprojects\u002Fnasionalrubber\u002Fchrome_2024-10-07_21-11-35.jpg","\u002Fimages\u002Fprojects\u002Fnasionalrubber\u002Fchrome_2024-10-08_16-18-06.jpg","\u002Fimages\u002Fprojects\u002Fnasionalrubber\u002Fchrome_2025-07-23_15-56-12.jpg",[401,402,403],"\u002Fimages\u002Fprojects\u002Fnasionalrubber\u002Fchrome_2024-03-06_18-29-55.jpg","\u002Fimages\u002Fprojects\u002Fnasionalrubber\u002Fchrome_2024-03-06_18-30-32.jpg","\u002Fimages\u002Fprojects\u002Fnasionalrubber\u002Fchrome_2024-03-06_18-31-27.jpg",{},"Nuxt with i18n. Same pages and products in both languages.","\u002Fprojects\u002Fnasionalrubber","website",{"title":349,"description":389},[410,217,411],"Vue","Tailwind","projects\u002Fnasionalrubber","ohoAIyQ2aSFTdWb_NHJtusU5fLse7Vb_DTwQmlmwIvU",{"id":415,"title":416,"body":417,"client":416,"description":453,"extension":79,"features":454,"gallery":461,"galleryTall":6,"image":462,"meta":465,"navigation":15,"notes":466,"path":467,"role":91,"seo":468,"stack":469,"stem":472,"year":473,"__hash__":474},"projects_en\u002Fprojects\u002Fhepamed.md","Hepamed",{"type":26,"value":418,"toc":447},[419,425,427,430,432,435,439,442,444],[29,420,421,424],{},[39,422,423],{},"HEPA.CLASS"," was a class platform for bimbingan belajar kedokteran. Semester packs for preklinik 1–7, a koas track, new-student class, quizzes, webinars.",[43,426,46],{"id":45},[29,428,429],{},"Medical students in Indonesia buy classes by semester, not as a Netflix subscription. The old way was WhatsApp groups and a spreadsheet of who paid. They wanted a catalog you can browse, a price, a login, and checkout on the card.",[43,431,53],{"id":52},[29,433,434],{},"Explore, pricing, login, checkout on each course. The August 2023 shots are the live catalog. Earlier shots are the screens we designed before it went public.",[43,436,438],{"id":437},"status","Status",[29,440,441],{},"Far enough to take payment on a course. The client stopped for budget. The catalog, accounts, and checkout path are still a complete start if the next brief is education.",[43,443,66],{"id":65},[29,445,446],{},"You sell batches of classes to a local audience. Checkout sits on the product, not in a generic “academy” template.",{"title":71,"searchDepth":72,"depth":72,"links":448},[449,450,451,452],{"id":45,"depth":72,"text":46},{"id":52,"depth":72,"text":53},{"id":437,"depth":72,"text":438},{"id":65,"depth":72,"text":66},"Online classes for Indonesian medical students. Preklinik, koas, quizzes, and pay-per-course checkout.",[455,456,457,458,459,460],"Course catalog by semester (preklinik 1–7)","Koas track and new-student class","Quizzes","Webinars","Student login","Pay on the course card",[462,463,464],"\u002Fimages\u002Fprojects\u002Fhepamed\u002Fchrome_2023-08-21_16-08-39.jpg","\u002Fimages\u002Fprojects\u002Fhepamed\u002Fchrome_2023-08-21_15-39-52.jpg","\u002Fimages\u002Fprojects\u002Fhepamed\u002Fchrome_2023-07-18_18-13-09.jpg",{},"React + Vite on Firebase. Catalog, auth, and checkout on each course card.","\u002Fprojects\u002Fhepamed",{"title":416,"description":453},[159,470,471],"Vite","Firebase","projects\u002Fhepamed",2023,"4M5rv5Zp3TISDI6meKNFMTJVH11EqE7ukBnonmENViA",{"id":476,"title":477,"body":478,"client":485,"description":516,"extension":79,"features":517,"gallery":525,"galleryTall":6,"image":526,"meta":531,"navigation":15,"notes":532,"path":533,"role":91,"seo":534,"stack":535,"stem":536,"year":473,"__hash__":537},"projects_en\u002Fprojects\u002Fsuperjaya.md","Superjaya",{"type":26,"value":479,"toc":511},[480,493,495,498,500,503,506,508],[29,481,482,483,486,487,492],{},"Wholesale shop for ",[39,484,485],{},"UD Superjaya"," in Samarinda, live at ",[33,488,491],{"href":489,"rel":490},"https:\u002F\u002Fsuperjaya.id",[177],"superjaya.id",". ABC alkaline packs, SKUs like ABCALKALINEA2, prices per 2 pcs. This is a counter that also sells online, not a catalog that dumps you into WhatsApp.",[43,494,46],{"id":45},[29,496,497],{},"Shop stock and warehouse stock were different numbers. A buyer needed to see both before they put something in the bag. Orders had to land on a named customer, with a phone and a payment method, not a guest checkout that nobody can match to the books.",[43,499,53],{"id":52},[29,501,502],{},"A storefront with search and best-sellers. Product pages that show shop stock in green and warehouse stock when it is zero. A cart. An order form: pick the customer, buyer name, phone, email, transfer or cash, a note. WhatsApp on the side for the people who still message first.",[29,504,505],{},"We started the repo in 2022. The live shop has been up since 2023. The screenshots are August 2026, the screens operators and buyers actually open.",[43,507,66],{"id":65},[29,509,510],{},"You sell from a shop and a warehouse. Pack sizes matter. The person ordering is not always the name on the account. This is that system, already running in Samarinda.",{"title":71,"searchDepth":72,"depth":72,"links":512},[513,514,515],{"id":45,"depth":72,"text":46},{"id":52,"depth":72,"text":53},{"id":65,"depth":72,"text":66},"Online shop for a Samarinda wholesaler. Catalog, shop vs warehouse stock, cart, and orders for named customers.",[204,518,519,520,521,522,523,524],"Search and best-sellers","Product pages with photos, SKU, and pack sizes","Stock at the shop and at the warehouse on the same page","Cart","Order form for a named customer","Bank transfer, cash, debit, virtual account","WhatsApp",[526,527,528,529,530],"\u002Fimages\u002Fprojects\u002Fsuperjaya\u002Fbrave_2026-08-26_22-30-38.webp","\u002Fimages\u002Fprojects\u002Fsuperjaya\u002Fbrave_2026-08-26_22-31-16.webp","\u002Fimages\u002Fprojects\u002Fsuperjaya\u002Fbrave_2026-08-26_22-31-26.webp","\u002Fimages\u002Fprojects\u002Fsuperjaya\u002Fbrave_2026-08-26_22-31-36.webp","\u002Fimages\u002Fprojects\u002Fsuperjaya\u002Fbrave_2026-08-26_22-31-01.webp",{},"Django backend, React storefront. Stock is per location with a movement log. Customers can carry NPWP. Live at superjaya.id.","\u002Fprojects\u002Fsuperjaya",{"title":477,"description":516},[279,159],"projects\u002Fsuperjaya","htmJNiBW9DlCaZ_Sjeaa_leAsbPgnXb2kb5uNRXKZog",{"id":539,"title":540,"body":541,"client":548,"description":571,"extension":79,"features":572,"gallery":579,"galleryTall":6,"image":580,"meta":585,"navigation":15,"notes":586,"path":587,"role":91,"seo":588,"stack":589,"stem":590,"year":591,"__hash__":592},"projects_en\u002Fprojects\u002Fmarchesa.md","Marchesa",{"type":26,"value":542,"toc":566},[543,549,553,556,558,561,563],[29,544,545,546,363],{},"The client pointed at Marchesa and said that was the site they wanted. We built a fashion shop in that direction for ",[39,547,548],{},"PT Media Bersama Sukses",[43,550,552],{"id":551},"what-it-was","What it was",[29,554,555],{},"A real storefront, not a catalog that dumps you into WhatsApp. Product grid, filters that actually narrow the list, a bag, a payment sheet with a countdown and an order id. The screenshots are from September–October 2022, while checkout was being wired.",[43,557,438],{"id":437},[29,559,560],{},"Shipped, then paused. The client stopped for budget. The checkout path is still complete. We can put it under another catalog.",[43,562,66],{"id":65},[29,564,565],{},"Selling online in Indonesia, payment is the part that fails. Bank transfer, e-wallets, QRIS, cards. We already connected that once. The brand on top can change.",{"title":71,"searchDepth":72,"depth":72,"links":567},[568,569,570],{"id":551,"depth":72,"text":552},{"id":437,"depth":72,"text":438},{"id":65,"depth":72,"text":66},"Fashion shop inspired by Marchesa. Catalog, filters, cart, and checkout for cards, bank transfer, GoPay, ShopeePay, and QRIS.",[573,574,575,576,577,578],"Product catalog with photos","Size and color filters","Shopping cart","Customer accounts","Checkout for cards, bank transfer, GoPay, ShopeePay, QRIS","Payment countdown and order ID",[580,581,582,583,584],"\u002Fimages\u002Fprojects\u002Fmarchesa\u002Fchrome_2022-09-15_15-29-14.jpg","\u002Fimages\u002Fprojects\u002Fmarchesa\u002Fchrome_2022-09-15_15-29-31.jpg","\u002Fimages\u002Fprojects\u002Fmarchesa\u002Fchrome_2022-09-16_16-36-38.jpg","\u002Fimages\u002Fprojects\u002Fmarchesa\u002Fchrome_2022-09-30_14-02-09.jpg","\u002Fimages\u002Fprojects\u002Fmarchesa\u002Fchrome_2022-10-03_14-08-55.jpg",{},"Django storefront. Checkout through Midtrans (Visa\u002FMastercard, BCA\u002FMandiri\u002FBNI\u002FBRI, GoPay, ShopeePay, QRIS, KlikPay).","\u002Fprojects\u002Fmarchesa",{"title":540,"description":571},[279,281],"projects\u002Fmarchesa",2022,"2Ir7xw9qzL_E7c5ARnsVVfsw7-D3_pYQrQCrgqcjmxA",{"id":594,"title":595,"body":596,"client":201,"description":631,"extension":79,"features":632,"gallery":639,"galleryTall":6,"image":640,"meta":647,"navigation":15,"notes":648,"path":649,"role":214,"seo":650,"stack":651,"stem":652,"year":653,"__hash__":654},"projects_en\u002Fprojects\u002Farticlearn.md","Articlearn",{"type":26,"value":597,"toc":626},[598,605,609,616,618,621,623],[29,599,600,601,604],{},"A blogging platform we shipped for ourselves in 2021 as ",[39,602,603],{},"Articlearn.id",". “Indonesia's free blogging platform.” Profiles, articles, tags, search, a trending list. Writers actually used it. Coding interviews, security write-ups, YOLO tutorials. Real posts, real dates.",[43,606,608],{"id":607},"what-changed","What changed",[29,610,611,612,615],{},"The 2021 shots are Articlearn: dark hero, numbered trending grid, account menu. 2022 is the same product still running. 2024 is the redesign under the ",[39,613,614],{},"Xamarind"," name: lighter layout, tag pills, sidebar. Same engine. Different skin.",[43,617,438],{"id":437},[29,619,620],{},"Discontinued. We stopped operating the public site. If a client needs a writing community or an internal knowledge base that looks like a site people want to open, this is that muscle. Not WordPress with a theme bolted on.",[43,622,66],{"id":65},[29,624,625],{},"You need accounts, an editor, tags, public profiles, and a feed. A place to write, not a brochure with a blog plugin.",{"title":71,"searchDepth":72,"depth":72,"links":627},[628,629,630],{"id":607,"depth":72,"text":608},{"id":437,"depth":72,"text":438},{"id":65,"depth":72,"text":66},"Indonesian blogging platform we built for ourselves. Articles, tags, profiles. Later redesigned as Xamarind. Gained writers, then we stopped.",[633,634,635,636,637,638],"Writer profiles","Articles and tags","Search","Trending list","Light and dark appearance","Public feed, not a CMS dump",[640,641,642,643,644,645,646],"\u002Fimages\u002Fprojects\u002Farticlearn\u002Fchrome_2021-06-15_16-24-16.png","\u002Fimages\u002Fprojects\u002Farticlearn\u002Fchrome_2021-06-15_16-24-18.png","\u002Fimages\u002Fprojects\u002Farticlearn\u002Fchrome_2021-07-18_20-12-30.png","\u002Fimages\u002Fprojects\u002Farticlearn\u002Fchrome_2022-07-02_18-41-21.png","\u002Fimages\u002Fprojects\u002Farticlearn\u002Fchrome_2024-10-18_16-21-18.jpg","\u002Fimages\u002Fprojects\u002Farticlearn\u002Fchrome_2024-10-18_16-22-24.jpg","\u002Fimages\u002Fprojects\u002Farticlearn\u002Fchrome_2024-10-25_15-21-26.jpg",{},"Django and PostgreSQL. 2024 redesign as Xamarind used the same engine with a lighter skin.","\u002Fprojects\u002Farticlearn",{"title":595,"description":631},[279,97],"projects\u002Farticlearn",2021,"r8s33mxpEMMPYM63CCDhUjkyhpSmu2RbxllHqnFZ5bQ",{"id":656,"title":548,"body":657,"client":548,"description":694,"extension":79,"features":695,"gallery":702,"galleryTall":6,"image":707,"meta":708,"navigation":15,"notes":709,"path":710,"role":407,"seo":711,"stack":712,"stem":713,"year":653,"__hash__":714},"projects_en\u002Fprojects\u002Fmbscctv.md",{"type":26,"value":658,"toc":689},[659,671,673,676,678,681,684,686],[29,660,661,662,664,665,670],{},"Company profile for ",[39,663,548],{},", a security-systems distributor in Surabaya, live at ",[33,666,669],{"href":667,"rel":668},"https:\u002F\u002Fmbscctv.com",[177],"mbscctv.com",". Honeywell, ZKTeco, Hikvision. CCTV, access control, the usual building kit. They have been in this trade since 1998. The site had to look like it.",[43,672,46],{"id":45},[29,674,675],{},"The old site needed a developer for every product swap and news post. That is a bad deal when the catalog changes weekly. They also wanted people to find them on Google for CCTV, access control, and the brands they distribute, not only through paid ads. A public face for sales, and pages the team can keep fresh.",[43,677,53],{"id":52},[29,679,680],{},"Product catalog, solutions, news, careers, brand pages. The team edits content without opening a code editor. More pages they can publish is more surface for search.",[29,682,683],{},"The 2021-2022 screenshots are the public site we shipped. Their own team has kept the catalog, pages, and design going since then. The live design and SEO are not entirely ours.",[43,685,66],{"id":65},[29,687,688],{},"You sell physical systems. You need catalog pages that rank, brand logos, articles, and a site that holds up on a phone.",{"title":71,"searchDepth":72,"depth":72,"links":690},[691,692,693],{"id":45,"depth":72,"text":46},{"id":52,"depth":72,"text":53},{"id":65,"depth":72,"text":66},"Company site for a Surabaya security-systems firm. Catalog, news, and brand pages built to show up on Google, not only to look current.",[696,697,698,699,700,701],"Product catalog","Brand pages (Honeywell, ZKTeco, Hikvision)","News and articles","Careers","Team can update pages without calling a developer","Built so search engines can find “CCTV Surabaya”",[703,704,705,706],"\u002Fimages\u002Fprojects\u002Fmbscctv\u002Fchrome_2021-07-27_13-40-52.webp","\u002Fimages\u002Fprojects\u002Fmbscctv\u002Fchrome_2021-07-27_13-55-30.webp","\u002Fimages\u002Fprojects\u002Fmbscctv\u002Fchrome_2022-07-12_16-11-28.webp","\u002Fimages\u002Fprojects\u002Fmbscctv\u002Fchrome_2025-07-22_15-11-17.webp","\u002Fimages\u002Fprojects\u002Fmbscctv\u002Fchrome_2022-07-12_15-12-14.webp",{},"First version Django. Rebuilt on Nuxt with a Git-based CMS. Products and posts are Markdown. Metadata and article structure for organic search.","\u002Fprojects\u002Fmbscctv",{"title":548,"description":694},[279,410,217,411],"projects\u002Fmbscctv","_f4CIyUocNHleqJlKqItrt9Ba_gTSXq9Ar5HcvvsUdY",1791130621229]