{"profile":{"name":"Dalrymple Ramos","title":"Software Developer & Agentic Engineer","location":"Dagupan City, Pangasinan, Philippines","about":"I am Dalrymple Ramos, a full-stack software developer based in Dagupan City, Pangasinan, Philippines. I build web applications, mobile apps, and AI integrations. My work spans web, mobile, and decentralized platforms, with a focus on clean architecture and practical tools that simplify workflows.","experience":[{"role":"Full-Stack Web Developer","company":"Makerspace Innovhub OPC","url":"https://www.makerspace.ph/","period":"Apr 2026 - Present","detail":"Scalable full-stack architecture · Web3 integrations · Enterprise solutions"},{"role":"Full-Stack Web Development Intern","company":"Makerspace Innovhub OPC","url":"https://www.makerspace.ph/","period":"Dec 2025 - Mar 2026","detail":"Web2 & Web3 development · Practical project shipping · Team collaboration"},{"role":"BS Information Technology","company":"PHINMA University of Pangasinan","period":"2022 - 2026","detail":"Software engineering · Modern web development · Data structures"}],"contact":{"email":"ramosdalrymple@gmail.com","linkedin":"https://www.linkedin.com/in/dalrymple-ramos/"},"url":"https://dalrympleramos.dev/","identityLinks":["https://github.com/ramosdalrymple-afk","https://www.linkedin.com/in/dalrymple-ramos/"]},"projects":[{"slug":"palora","imageAlt":"Palora landing page with document upload formats and example study pals ranked by topic","title":"Palora","image":"/palora/palora-landing-2026-10.webp","summary":"An AI study hub that turns notes into checked practice questions, spaced reviews, and seven study modes with illustrated study pals.","description":["Palora is a study hub for students and self-learners who want to turn lecture slides, handouts, and notes into regular practice. PDF, PowerPoint, Word, photographed pages, and pasted notes feed a library of questions, explanations, and topics, with a choice of 30 illustrated study pals.","I built a resumable question-generation pipeline with source-based verification and task-specific Gemini/Groq routing, then connected question reviews and self-rated flashcards to SM-2 scheduling. Seven study modes, weak-topic tracking, practice exams, calendar plans, focus sessions, and Anki exports extend the same material into a study routine, while cached question reviews can queue answers offline for later synchronization."],"tags":["Next.js","React","TypeScript","Tailwind CSS","Supabase","PostgreSQL","Prisma","Google Gemini AI","Groq","Zod","unpdf","JSZip","SM-2","PWA","Web Push"],"links":[{"label":"live preview","url":"https://palora-ai.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/palora"},{"slug":"resona","imageAlt":"Resona artwork featuring its Android music player and local library interface","title":"Resona","image":"/resona/resona-landing-2026-10.jpg","summary":"An offline-first Android music player with a local library, customizable layouts, and on-device playlists. No account required.","description":["Resona is an offline-first music player for Android built for listeners who keep their own music libraries and want a player designed around ownership rather than streaming access.","I built the library on Android’s MediaStore through a Kotlin platform channel, with just_audio playback and audio_service keeping notification, lock-screen, headset, and Bluetooth controls in step with the app. Player Studio adds Classic, Minimal, and Artwork Focus layouts, while favorites, playlists, and the last queue stay on the device in SQLite, with no account required."],"tags":["Flutter","Dart","Kotlin","Android MediaStore","just_audio","audio_service","SQLite"],"links":[{"label":"live preview","url":"https://resona-fx.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/resona"},{"slug":"muru","imageAlt":"Muru workspace dashboard with its navigation and personal tools","title":"Muru","image":"/muru/muru-dashboard-2026-10.png","summary":"An illustrated personal workspace connecting notes, tasks, calendar, shopping, and finance, with a browser-encrypted credential vault.","description":["Muru is a personal workspace for keeping everyday work in one place: rich notes, code snippets, saved links, tasks, calendar events, shopping lists, receipts, and money. Its Compact Daybook design pairs lavender paper and editorial type with an illustrated little keeper, across desktop and phone layouts.","I connected tasks to calendar events and shopping receipts to finance, alongside savings pots and browser-side AES-256-GCM encryption with an Argon2id-derived key for passwords and locked note bodies. Metadata stays separate from encrypted content. The installable PWA supports cached-page browsing and opt-in Web Push reminders; hosted access is invitation-based, and new file uploads are currently restricted to staff accounts."],"tags":["Next.js","React","TypeScript","Supabase","PostgreSQL","Drizzle ORM","Tailwind CSS","Tiptap","Recharts","Monaco","FullCalendar","AES-256-GCM","Argon2id","PWA","Web Push","Upstash Redis","React Email"],"links":[{"label":"live preview","url":"https://muru.dalrympleramos.dev/"}],"url":"https://dalrympleramos.dev/projects/muru"},{"slug":"sloop-in-open-water","imageAlt":"Sloop in Open Water sailing simulation showing a boat and the surrounding ocean","title":"Sloop in Open Water","image":"/sloop-in-open-water/sloop.png","summary":"A browser sailing simulator with ten boats, wave-driven physics, live weather, and a tropical archipelago to explore.","description":["Sloop in Open Water is a browser-based sailing simulator built for players who want an open tropical archipelago to explore, with a ten-boat fleet to sail rather than a single vessel.","I modeled wave-driven buoyancy and heel for the ten boats, then used spray, wakes, and a procedural seabed to make their motion visible. Live weather, a day/night cycle, AI harbor traffic, autopilot, and touch controls extend the simulation across desktop and offline play."],"tags":["Three.js","TypeScript","Vite","WebGL","GLSL","Web Audio API","PWA","Motion"],"links":[{"label":"live preview","url":"https://sloop-in-open-water.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/sloop-in-open-water"},{"slug":"fat-fingers","imageAlt":"fat-fingers typing-test interface with text prompts and performance information","title":"fat-fingers","image":"/fat-fingers/fatfitngers.png","summary":"A typing test with speed, accuracy, and consistency tracking, session history, and a Gemini-generated roast for each result.","description":["fat-fingers is a typing test built for typists who want their speed measured honestly and their ego handled rudely.","I built timed, word-count, and quote modes around shared WPM, accuracy, and consistency tracking. Each completed test becomes a Gemini-generated roast and a point in the session history, so the joke still gives typists a way to measure progress."],"tags":["Next.js","React","TypeScript","Tailwind CSS","Google Gemini AI","Framer Motion","Recharts","Zod"],"links":[{"label":"live preview","url":"https://fatfingerswpm.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/fat-fingers"},{"slug":"ligtas-dagupan","imageAlt":"Ligtas Dagupan map interface with incident reporting and location panels","title":"Ligtas Dagupan","contributionRole":"contributor","image":"/ligtas/ligtas.png","summary":"A collaborative crisis coordination platform for Dagupan, bringing incident reports, relief locations, and weather onto one map.","description":["Ligtas Dagupan is a comprehensive crisis coordination platform built for citizens, volunteers, and local responders who need faster and more reliable disaster response tools.","A shared map brings incident reports, relief locations, and weather information into one view. Shared query caches and realtime subscriptions support coordination views, while a Sui testnet donation ledger demonstrates an experimental support-recording flow."],"tags":["Next.js","React","TypeScript","Tailwind CSS","Supabase","Leaflet","TanStack Query","Shadcn/ui","PostgreSQL","OpenStreetMap","Stormglass","Open-Meteo","Sui Move"],"links":[{"label":"live preview","url":"https://ligtas-dagupan.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/ligtas-dagupan"},{"slug":"xnap","imageAlt":"Xnap browser photo booth showing its camera and photo-strip interface","title":"Xnap!","image":"/xnap/xnap.png","summary":"A browser photo booth with hands-free gesture capture, filters, and stickers. No separate app install needed.","description":["Xnap! is a browser-based photo booth application built for users who want a fun, interactive capturing experience directly from the web.","MediaPipe gesture controls let people trigger a photo without touching the camera, while filters and stickers shape the shot in the same browser session. The capture flow works without a separate app install."],"tags":["React","Next.js","TypeScript","Framer Motion","Tailwind CSS","Supabase","MediaPipe"],"links":[{"label":"live preview","url":"https://photoxnap.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/xnap"},{"slug":"reset","imageAlt":"Reset habit-tracking interface showing personal progress and reflection tools","title":"Reset","image":"/reset/reset.png","summary":"A mobile sobriety and habit-tracking platform connecting daily check-ins with personal reflection and recovery steps.","description":["Reset is a sobriety and wellness platform built for individuals in recovery and their support networks who want a structured path toward lasting positive change.","Daily habit check-ins and cognitive behavioral mapping sit in the same mobile flow, connecting progress tracking to personalized recovery steps. The structure gives people in recovery a clearer way to follow their own patterns over time."],"tags":["Flutter","Firebase","Dart","Google Gemini AI","REST API"],"links":[{"label":"live preview","url":"https://reset-habittracker.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/reset"},{"slug":"break-it-down","imageAlt":"Break-it-Down task-planning canvas with connected goal and subtask cards","title":"Break-it-Down","image":"/break-it-down/break-it-down.png","summary":"An AI task planner that turns large ideas into recursively expandable flowcharts on a navigable infinite canvas.","description":["Break-it-Down is an interactive task visualizer built for planners who want an effortless way to turn large project ideas into actionable steps.","AI-generated flowcharts turn a large idea into tasks that can be expanded recursively. Pan and zoom keep the growing plan navigable on an infinite canvas, making the next actionable step easier to find."],"tags":["React","Next.js","Vercel AI SDK","Zod","Framer Motion","Tailwind CSS"],"links":[{"label":"live preview","url":"https://break-it-down-beta.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/break-it-down"},{"slug":"curricula","image":"/curricula/curricula.webp","imageAlt":"Curricula internship coordination introduction and sign-in screen","title":"Curricula","summary":"An internship management dashboard with daily logbooks, progress tracking, and reports for students and supervisors.","description":["Curricula is a modern internship management website built for students, supervisors, and administrators who want a streamlined way to oversee educational programs.","Daily logbooks, live progress, performance metrics, and automated reports share one dashboard. Students and supervisors can follow the same internship record instead of gathering updates from separate tools."],"tags":["React","Next.js","TypeScript","Convex","Tailwind CSS","Clerk","Shadcn/ui","Zod","Serwist"],"links":[{"label":"live preview","url":"https://curricula-ojt.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/curricula"},{"slug":"snipr","image":"/snipr/snipr.webp","imageAlt":"Snipr public overview showing code reuse, organization, and search features","title":"Snipr","summary":"A code snippet library with real-time synchronization and authenticated access for collecting reusable code patterns.","description":["Snipr is a code snippet management app built for developers who want one organized place to store, manage, and access their favorite code patterns.","Convex keeps saved snippets synchronized in real time, while Clerk manages access to the library. Developers can collect and retrieve reusable patterns in one place instead of searching through old projects."],"tags":["React","Next.js","TypeScript","Convex","Tailwind CSS","Clerk","Shadcn/ui","Serwist"],"links":[{"label":"live preview","url":"https://snipr-beta.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/snipr"},{"slug":"budgio","image":"/budgio/budgio.webp","imageAlt":"Budgio public product preview with example balances, budgets, and transactions","title":"Budgio","summary":"A personal finance tracker bringing transactions, monthly budgets, and live spending summaries into one dashboard.","description":["Budgio is a real-time personal finance tracker built for people who want a clearer view of their money without wrestling with bloated spreadsheets or noisy dashboards. ","Transaction entries sit alongside monthly budgets and live summaries, so spending can be read in context. Profile-based settings keep the dashboard focused on each person's own financial picture."],"tags":["Next.js","React","TypeScript","Tailwind CSS","Supabase","PostgreSQL","Zod"],"links":[{"label":"live preview","url":"https://budgio-tracker.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/budgio"},{"slug":"pip-bot","image":"/pip-bot/pip-bot.webp","imageAlt":"Pip Bot public documentation, branded MIH Bot, for Discord tasks and deadlines","title":"Pip Bot","summary":"A Discord task-management bot for OJT teams, with task commands, deadlines, and reminders directly in chat.","description":["Pip Bot is a Discord-native task management bot for OJT teams. Its package and documentation also use the name MIH Bot, with tasks and deadlines managed inside chat servers.","Discord commands move tasks through their lifecycle, track deadlines, and send reminders in the channels where OJT teams already work. Keeping the workflow in chat makes the next action visible without checking another task board."],"tags":["Node.js","MongoDB","Discord API / Discord.js"],"links":[{"label":"live preview","url":"https://pip-bot-web.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/pip-bot"},{"slug":"iwblog","image":"/iwblog/iwblog.webp","imageAlt":"IWBlog retro homepage with green terminal windows and IndieWeb navigation","title":"IWBlog","summary":"A retro IndieWeb blog with draggable windows, local Markdown articles, and a Winamp-inspired Last.fm panel.","description":["IWBlog is a retro 2000s-inspired blog platform built for the IndieWeb community who want a nostalgic, chaotic alternative to modern minimalist design.","Draggable windows, CRT scanlines, and a Winamp-inspired panel carry the early-web feel through the interface. Local Markdown supplies the articles, while Last.fm supplies recent-track metadata."],"tags":["React","Next.js","TypeScript","SWR","Framer Motion","Tailwind CSS","Gray-matter & Remark","Last.fm API"],"links":[{"label":"live preview","url":"https://y2k-indie-web.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/iwblog"},{"slug":"ovulab","image":"/ovulab/ovulab.webp","imageAlt":"Ovulab public introduction to cycle logging and chart-based insights","title":"Ovulab","summary":"A private menstrual tracker with daily logs, cycle estimates, and trend charts. Predictions are not clinically validated.","description":["Ovulab is a private menstrual tracker built for people who want something more helpful than a basic period calendar.","Daily logs feed cycle estimates and trend charts. Tracker-generated history remains distinguishable from manual records; the inspected prediction rules are application estimates with no clinical accuracy established here."],"tags":["Next.js","React","TypeScript","Tailwind CSS","Supabase","Shadcn/ui","PostgreSQL","Zod"],"links":[{"label":"live preview","url":"https://ovulab.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/ovulab"},{"slug":"glitch-freak","image":"/glitch-freak/glitch-freak.webp","imageAlt":"Glitch Freak public marketplace interface in its empty-listings state","title":"Glitch Freak","summary":"An experimental Sui collectible marketplace with artwork, trait metadata, and Move listing logic. Preview minting is disabled.","description":["Glitch Freak is an experimental Sui collectible marketplace with stylized artwork and trait metadata.","Client-generated traits accompany Move collectible objects and listing logic. The inspected preview mint handler disables minting; trait labels do not establish cryptographic rarity or verified volatility."],"tags":["Sui Move","React","Next.js","TypeScript","Tailwind CSS","Framer Motion"],"links":[{"label":"live preview","url":"https://glitchfreaknftbeta.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/glitch-freak"},{"slug":"beats-nft-marketplace","image":"/beats-nft-marketplace/beats-nft-marketplace.webp","imageAlt":"Beats NFT Marketplace public homepage with collection artwork and navigation","title":"Beats NFT Marketplace","summary":"A Sui music-collectible project pairing track metadata with marketplace listings, payments, and seller proceeds.","description":["Beats NFT Marketplace is a Sui music-collectible project combining track metadata with marketplace listing and payment mechanics.","Music objects store artist, genre, cover, and music references. The inspected marketplace accounts for seller proceeds separately; the source review does not establish royalty distribution or measured artist compensation."],"tags":["Sui Move","React","Next.js","TypeScript","Tailwind CSS"],"links":[{"label":"live preview","url":"https://beats-musicnft.vercel.app/"}],"url":"https://dalrympleramos.dev/projects/beats-nft-marketplace"},{"slug":"velvet-gallery","image":"/velvet-gallery/velvet-gallery.webp","imageAlt":"Velvet Gallery source artwork showing a textured live-music scene","title":"Velvet Gallery","summary":"A Gatsby artwork archive with a responsive gallery, Sharp image processing, and blur-up loading placeholders.","description":["Velvet Gallery, also named VelvetHumming in its repository, is a Gatsby visual-archive project for presenting artwork in a responsive grid.","Gatsby's file pipeline combines Sharp image processing, responsive grids, and blur-up placeholders. Those pieces keep the visual archive browsable while larger images load."],"tags":["Gatsby 5","React","GraphQL","Gatsby Plugin Image","Sharp","Gatsby Source Filesystem"],"links":[],"url":"https://dalrympleramos.dev/projects/velvet-gallery"},{"slug":"linguaar","image":"/linguaar/linguaar.webp","imageAlt":"LinguaAR mobile home screen with gesture tools, favorites, and lesson navigation","imageFit":"contain","title":"LinguaAR","contributionRole":"contributor","summary":"A Filipino Sign Language learning prototype with guided practice and static hand-gesture classification, not validated continuous translation.","description":["LinguaAR is a Filipino Sign Language (FSL) learning and accessibility prototype combining guided practice with gesture and speech tools.","Flutter powers the learning interface, while the inspected Flask and cvzone path classifies images of static hand gestures. This prototype implementation does not establish validated continuous FSL translation or a measured recognition accuracy."],"tags":["Flutter","Dart","Machine Learning","Python (Flask)","MediaPipe"],"links":[{"label":"repository","url":"https://github.com/ramosdalrymple-afk/LinguaAR"}],"url":"https://dalrympleramos.dev/projects/linguaar"}],"posts":[{"slug":"palora-verified-questions-spaced-review","title":"Building Palora's Verified Questions and Spaced Reviews","description":"A walkthrough of Palora's resumable document pipeline, task-specific Gemini/Groq routing, source verification, and transactional SM-2 review updates.","date":"October 9, 2026","publishedAt":"2026-10-09","authorId":"https://dalrympleramos.dev/#person","seoTitle":"Palora Architecture: Verified AI Questions & SM-2 Reviews","image":{"src":"/palora/palora-landing-2026-10.webp","alt":"Palora landing page introducing document-based practice and illustrated study pals","width":1440,"height":810},"tags":["Next.js","TypeScript","Prisma","AI","Spaced repetition","SM-2"],"relatedProjects":["palora"],"url":"https://dalrympleramos.dev/blog/palora-verified-questions-spaced-review"},{"slug":"resona-offline-android-playback","title":"Building Resona's Offline Android Library and Playback","description":"A practical walkthrough of Resona's Kotlin MediaStore channel, shared Flutter playback controller, audio_service controls, and SQLite queue restoration.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","seoTitle":"Flutter MediaStore & Background Playback: Resona Architecture","image":{"src":"/resona/resona-landing-2026-10.jpg","alt":"Resona product artwork showing the local music library and player interface","width":1920,"height":1080},"tags":["Flutter","Android","MediaStore","audio_service","SQLite"],"relatedProjects":["resona"],"url":"https://dalrympleramos.dev/blog/resona-offline-android-playback"},{"slug":"muru-browser-credential-encryption","title":"Designing Muru's Browser-Side Credential Encryption","description":"How Muru separates account login from vault unlocking, encrypts passwords and locked note bodies in the browser, and preserves those boundaries in backups.","date":"October 4, 2026","publishedAt":"2026-10-04","updatedAt":"2026-10-12","authorId":"https://dalrympleramos.dev/#person","image":{"src":"/muru/muru-dashboard-2026-10.png","alt":"Muru product preview","width":1920,"height":1080},"tags":["Next.js","React","TypeScript","Supabase","PostgreSQL"],"relatedProjects":["muru"],"url":"https://dalrympleramos.dev/blog/muru-browser-credential-encryption"},{"slug":"sloop-pure-sailing-instruments","title":"Keeping Sailing Instruments Independent of Three.js","description":"How shared wind conventions, point-of-sail boundaries, and pure calculations keep a browser sailing HUD consistent.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","image":{"src":"/sloop-in-open-water/sloop.png","alt":"Sloop in Open Water product preview","width":1920,"height":1080},"tags":["Three.js","TypeScript","Vite","WebGL","GLSL"],"relatedProjects":["sloop-in-open-water"],"url":"https://dalrympleramos.dev/blog/sloop-pure-sailing-instruments"},{"slug":"fat-fingers-replay-typing-scores","title":"Replaying Keystrokes to Verify Typing Scores","description":"Why fat-fingers regenerates a typing target and replays timed events instead of accepting a client-reported leaderboard score.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","image":{"src":"/fat-fingers/fatfitngers.png","alt":"fat-fingers product preview","width":1920,"height":1080},"tags":["Next.js","React","TypeScript","Tailwind CSS","Google Gemini AI"],"relatedProjects":["fat-fingers"],"url":"https://dalrympleramos.dev/blog/fat-fingers-replay-typing-scores"},{"slug":"ligtas-shared-map-subscriptions","title":"Sharing Supabase Subscriptions Across Ligtas Map Views","description":"How Ligtas Dagupan shares realtime table subscriptions while TanStack Query owns cached map data and refreshes.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","image":{"src":"/ligtas/ligtas.png","alt":"Ligtas Dagupan product preview","width":1920,"height":1080},"tags":["Next.js","React","TypeScript","Tailwind CSS","Supabase"],"relatedProjects":["ligtas-dagupan"],"url":"https://dalrympleramos.dev/blog/ligtas-shared-map-subscriptions"},{"slug":"xnap-normalized-photo-stickers","title":"Keeping Photo Stickers Stable Across Preview and Export","description":"How Xnap stores normalized sticker positions and sizes, then uses one compositor for photo-strip exports.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","image":{"src":"/xnap/xnap.png","alt":"Xnap! product preview","width":1920,"height":1080},"tags":["React","Next.js","TypeScript","Framer Motion","Tailwind CSS"],"relatedProjects":["xnap"],"url":"https://dalrympleramos.dev/blog/xnap-normalized-photo-stickers"},{"slug":"reset-evolving-flutter-habit-model","title":"Evolving a Flutter Habit Model Without Breaking Older Records","description":"How Reset converts legacy motivation strings and date representations into a consistent Dart model at the persistence boundary.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","image":{"src":"/reset/reset.png","alt":"Reset product preview","width":1901,"height":1079},"tags":["Flutter","Firebase","Dart","Google Gemini AI","REST API"],"relatedProjects":["reset"],"url":"https://dalrympleramos.dev/blog/reset-evolving-flutter-habit-model"},{"slug":"break-it-down-streamed-plan-schema","title":"A Zod Contract for Streamed AI Task Plans","description":"How Break-it-Down gives generated subtasks a defined shape, and where structural validation stops short of plan quality.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","image":{"src":"/break-it-down/break-it-down.png","alt":"Break-it-Down product preview","width":1901,"height":1072},"tags":["React","Next.js","Vercel AI SDK","Zod","Framer Motion"],"relatedProjects":["break-it-down"],"url":"https://dalrympleramos.dev/blog/break-it-down-streamed-plan-schema"},{"slug":"curricula-manila-time-tracking","title":"Making Internship Time Tracking Explicit About Asia/Manila","description":"How Curricula separates elapsed work duration from local date labels and applies explicit application rules to internship logs.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["React","Next.js","TypeScript","Convex","Tailwind CSS"],"relatedProjects":["curricula"],"url":"https://dalrympleramos.dev/blog/curricula-manila-time-tracking"},{"slug":"snipr-ownership-checks","title":"Ownership Checks Beyond an Indexed Snippet Query","description":"Why Snipr verifies stored snippet and folder owners during mutations even when its read queries already use a user index.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["React","Next.js","TypeScript","Convex","Tailwind CSS"],"relatedProjects":["snipr"],"url":"https://dalrympleramos.dev/blog/snipr-ownership-checks"},{"slug":"budgio-refund-transfer-semantics","title":"Giving Refunds and Transfers Different Budget Semantics","description":"How Budgio applies distinct balance and category-spending rules to expenses, refunds, income, and transfers.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["Next.js","React","TypeScript","Tailwind CSS","Supabase"],"relatedProjects":["budgio"],"url":"https://dalrympleramos.dev/blog/budgio-refund-transfer-semantics"},{"slug":"pip-bot-durable-state-discord-delivery","title":"Separating Durable Task State from Discord Message Delivery","description":"How Pip Bot records approval and rejection before attempting Discord updates, and what remains unresolved when notification delivery fails.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["Node.js","MongoDB","Discord API / Discord.js"],"relatedProjects":["pip-bot"],"url":"https://dalrympleramos.dev/blog/pip-bot-durable-state-discord-delivery"},{"slug":"iwblog-file-content-retro-interface","title":"Separating Retro Presentation from File-Based Blog Content","description":"How IWBlog keeps local Markdown articles and Last.fm listening metadata separate from its nostalgic windowed interface.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["React","Next.js","TypeScript","SWR","Framer Motion"],"relatedProjects":["iwblog"],"url":"https://dalrympleramos.dev/blog/iwblog-file-content-retro-interface"},{"slug":"ovulab-derived-cycle-reconciliation","title":"Rebuilding Derived Cycle Records After Log Edits","description":"How Ovulab reconciles tracker-generated cycle records while keeping manually entered history outside the derived-record cleanup.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["Next.js","React","TypeScript","Tailwind CSS","Supabase"],"relatedProjects":["ovulab"],"url":"https://dalrympleramos.dev/blog/ovulab-derived-cycle-reconciliation"},{"slug":"glitch-freak-metadata-contract-rules","title":"Distinguishing NFT Trait Metadata from Enforced Contract Rules","description":"A source review of Glitch Freak showing where client-generated trait labels end and Sui Move marketplace rules begin.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["Sui Move","React","Next.js","TypeScript","Tailwind CSS"],"relatedProjects":["glitch-freak"],"url":"https://dalrympleramos.dev/blog/glitch-freak-metadata-contract-rules"},{"slug":"beats-metadata-marketplace-proceeds","title":"Modeling Marketplace Proceeds Separately from Music Metadata","description":"How Beats separates music-object fields from listing payments and seller withdrawals in its inspected Sui Move modules.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["Sui Move","React","Next.js","TypeScript","Tailwind CSS"],"relatedProjects":["beats-nft-marketplace"],"url":"https://dalrympleramos.dev/blog/beats-metadata-marketplace-proceeds"},{"slug":"velvet-gatsby-image-file-graph","title":"Building an Image Gallery from Gatsby's File Graph","description":"How Velvet Gallery queries filesystem images, requests processed variants, and renders them through GatsbyImage.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["Gatsby 5","React","GraphQL","Gatsby Plugin Image","Sharp"],"relatedProjects":["velvet-gallery"],"url":"https://dalrympleramos.dev/blog/velvet-gatsby-image-file-graph"},{"slug":"linguaar-hand-image-classification","title":"From a Hand Image to a Gesture Label in LinguaAR","description":"A source walkthrough of LinguaAR hand cropping, aspect-preserving resizing, static-label classification, and the client/server contract to verify.","date":"October 4, 2026","publishedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","tags":["Flutter","Dart","Machine Learning","Python (Flask)","MediaPipe"],"relatedProjects":["linguaar"],"url":"https://dalrympleramos.dev/blog/linguaar-hand-image-classification"},{"slug":"the-era-of-vibe-coding","title":"The Era of Vibe Coding: Shipping Fast, Breaking Things, and the Trap of the AI Autopilot","description":"Prompting your way to a shipped product is the new normal. But what happens when the 'vibes' run out and you actually have to engineer the underlying logic?","date":"April 16, 2026","publishedAt":"2026-04-16","updatedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","seoTitle":"Vibe Coding: Shipping Fast Without Losing Engineering Discipline","image":{"src":"/blogs-images/ChatGPT%20Image%20Sep%2023%2C%202026%2C%2003_39_01%20AM.png","alt":"A laptop showing an AI coding assistant at work, with notes about shipping fast, breaking things, and learning.","width":1672,"height":941},"tags":["AI Development","Vibe Coding","Indie Hacking","Tech Philosophy","Software Architecture"],"relatedProjects":[],"url":"https://dalrympleramos.dev/blog/the-era-of-vibe-coding"},{"slug":"dalrymple","title":"Hello World: Who I Am and What I Build","description":"A reflection on my growth from an IT student and intern into a full-stack developer, and the engineering principles that guide how I build.","date":"April 14, 2026","publishedAt":"2026-04-14","updatedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","seoTitle":"About Dalrymple Ramos: What I Build","image":{"src":"/blogs-images/ChatGPT%20Image%20Sep%2023%2C%202026%2C%2003_31_10%20AM.png","alt":"A developer's workspace at dusk, with a laptop and reminders to build, create, and solve.","width":1672,"height":941},"tags":["Introduction","Software Engineering","Full-Stack","Web3","Portfolio"],"relatedProjects":["muru","resona","ligtas-dagupan"],"url":"https://dalrympleramos.dev/blog/dalrymple"},{"slug":"sleepingdeveloper","title":"Waking Up the Inner Developer: The Discipline of Continuous Learning","description":"Why surviving in tech isn't about mastering a single tool, but building the habit of failing fast, shipping often, and learning continuously across all disciplines.","date":"April 14, 2026","publishedAt":"2026-04-14","updatedAt":"2026-10-04","authorId":"https://dalrympleramos.dev/#person","seoTitle":"The Discipline of Continuous Learning in Software Development","image":{"src":"/blogs-images/ChatGPT%20Image%20Sep%2023%2C%202026%2C%2003_37_40%20AM.png","alt":"A developer's desk at sunrise with a laptop displaying a continuous learning loop and notes about learning, building, and improving.","width":1672,"height":941},"tags":["Information Technology","Continuous Learning","Career Development","Tech Philosophy","Indie Hacking"],"relatedProjects":[],"url":"https://dalrympleramos.dev/blog/sleepingdeveloper"}]}