[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"projects\u002Fpixlink\u002F:en:{}":3},{"id":4,"title":5,"slug":6,"slugs":7,"client_name":8,"sector":9,"year":10,"summary":11,"cover":12,"technologies":22,"accent_color":30,"is_featured":31,"status":32,"animation":6,"platforms":33,"body":37,"results":38,"features":39,"gallery":48,"url":8,"seo_description":8,"updated_at":49,"services":50,"testimonials":85},1,"PixLink","pixlink",{"it":6,"en":6,"de":6},"","Mobile app · IoT",2026,"An app and an AMOLED board designed together: send photos and animated GIFs from your phone over Bluetooth, and the board shows them, along with your notifications and Claude Code status.",{"id":13,"url":14,"width":15,"height":16,"alt":17,"variants":18,"is_svg":21},2,"\u002Fmedia\u002Fuploads\u002F2026\u002F10\u002Fprogetto-pixlink.png",1600,1000,"Preview of PixLink",{"480":19,"960":20},"\u002Fmedia\u002Fuploads\u002F2026\u002F10\u002Fprogetto-pixlink_480.webp","\u002Fmedia\u002Fuploads\u002F2026\u002F10\u002Fprogetto-pixlink_960.webp",false,[23,24,25,26,27,28,29],"Flutter","Dart","C++","LVGL","NimBLE","Django","PostgreSQL","#20aee5",true,"beta",[34,35,36],"Android","iOS","ESP32-S3","\u003Cp>PixLink is a three-part product, all built by me and designed to work together.\u003C\u002Fp>\u003Ch2>The app\u003C\u002Fh2>\u003Cp>Written in \u003Cstrong>Flutter\u003C\u002Fstrong> for Android and iOS. It finds nearby boards, renames them and sends images and GIFs already optimised for the 280×456 screen: it adapts orientation, crops, compresses and verifies the transfer with an MD5 check. It has an editor with text and presets, converts videos to GIFs, forwards phone notifications and shows the status of Claude Code sessions.\u003C\u002Fp>\u003Ch2>The board\u003C\u002Fh2>\u003Cp>The firmware runs on an \u003Cstrong>ESP32-S3 with a 1.64\" AMOLED touch display\u003C\u002Fstrong>. LVGL interface, NimBLE Bluetooth, JPEG and animated GIF decoding, pop-up notifications, a carousel that cycles modes and an idle animation. It updates itself over Bluetooth, verifying the image and rolling back if something goes wrong.\u003C\u002Fp>\u003Ch2>The server\u003C\u002Fh2>\u003Cp>A \u003Cstrong>Django\u003C\u002Fstrong> backend manages accounts with Google sign-in, registers boards, relays content when Wi‑Fi is used instead of Bluetooth and distributes new firmware versions.\u003C\u002Fp>",[],[40,41,42,43,44,45,46,47],"Send photos and animated GIFs over Bluetooth Low Energy","Built-in editor: crop, text, presets and video → GIF conversion","Phone notifications forwarded to the board","Claude Code widget: sessions, tokens and cost in real time","Carousel that cycles modes on the board","Wi‑Fi setup and sending via server too","Over-the-air firmware updates","Google sign-in and multiple boards",[],"2026-10-20T14:35:40.934162+02:00",[51,69],{"id":4,"title":52,"slug":53,"slugs":54,"category":57,"audience":58,"icon":59,"summary":60,"features":61,"image":68,"is_featured":31},"Mobile apps and IoT","mobile-apps-and-iot",{"it":55,"en":53,"de":56},"app-mobile-e-iot","mobile-apps-und-iot","custom","all","i-lucide-smartphone","Android and iOS apps that talk to hardware: Bluetooth, Wi‑Fi, ESP32 firmware and over-the-air updates.",[62,63,64,65,66,67],"Flutter apps for Android and iOS","Bluetooth Low Energy and Wi‑Fi","ESP32 firmware in C++ with LVGL UI","OTA firmware updates","Backend for accounts and devices","Store publishing",null,{"id":13,"title":70,"slug":71,"slugs":72,"category":75,"audience":58,"icon":76,"summary":77,"features":78,"image":68,"is_featured":31},"Web apps and SaaS","web-apps-and-saas",{"it":73,"en":71,"de":74},"web-app-e-saas","web-apps-und-saas","web","i-lucide-app-window","Fast, secure multi-user web applications: 2FA login, roles, APIs, installable as apps on the phone.",[79,80,81,82,83,84],"React, Vue and Nuxt frontends","Django, Fastify and Node backends","Accounts, invitations, roles and 2FA","Installable PWAs","Multilingual","Documented APIs",[]]