{"site":{"name":"drmilk.dev","url":"https://drmilk.dev","type":"Portfolio","summary":"Portfolio for Bogdan Ciubotaru, also known as DrMilk, covering full-stack web work, Minecraft systems development, TypeWriter extensions, RPG quest systems, model and media workflows, automation, and server infrastructure.","contact":{"email":"bciubotaru24@gmail.com","github":"https://github.com/BogdanCiubotaru24","linkedin":"https://www.linkedin.com/in/bogdan-ciubotaru-b634041b3/"}},"person":{"name":"Bogdan Ciubotaru","handle":"DrMilk","timezone":"Europe/Bucharest","roles":["Full-stack developer","Minecraft systems developer","TypeWriter extension developer","Automation builder","Server infrastructure operator"],"coreTechnologies":["Kotlin","Java","Paper","TypeWriter","BetterModel","ModelEngine","Next.js","React","TypeScript","Node.js","Python","Docker","Linux","Nginx","Git"],"availableFor":["Minecraft Plugin Developer","Minecraft Setup Specialist","Minecraft Configurator","Minecraft Modelling / Animation Workflow","Web Developer","Discord Bot / Automation Developer","Program / App Developer","System Administrator","Dialogue / Media Systems","Combat / RPG Mechanics"]},"portfolioWebsite":{"description":"The portfolio itself is a Next.js site with a dynamic JSON-backed content store, authenticated admin panel, media upload support, public visibility toggles, TypeWriter case-study page, project browser, media galleries, and an optional reactor-style interactive discovery experience.","editableContent":["Projects","TypeWriter extensions","Models and assets","Quest narratives","Quest/objective systems","Demos and media","Role/service labels","Operations cards","Major public sections"]},"projects":[{"id":"codex","title":"Codex Hivemind","category":"AI & Orchestration","browseCategory":"AI / MCP","summary":"Autonomous AI Orchestration Platform coordinating a swarm of sandboxed agents.","detail":"A distributed control plane for AI coding agents. It manages task decomposition, sandboxed execution, memory retrieval, and Model Context Protocol communication across multiple specialized workers.","signal":"Agent orchestration, memory routing, MCP tooling, and automated execution systems.","technologies":["Rust","Docker","MCP","Redis","Next.js 14"],"features":["Multi-agent task routing","MCP-compatible tool layer","Dockerized execution sandboxes","Memory retrieval and context routing"],"image":"https://drmilk.dev/images/codex_platform_mockup_1768344957774.png","media":[],"screenshotEvidence":[]},{"id":"typewriter","title":"TypeWriter Systems","category":"Minecraft Systems","browseCategory":"Minecraft Systems","summary":"Custom TypeWriter extensions and Minecraft server systems for RPG/adventure gameplay.","detail":"A suite of custom TypeWriter and Minecraft systems covering embedded MCP authoring, radial context menus, model-driven gameplay, voiceover/dialogue tooling, video cinematics, resource-pack readiness, checkpoints, spawnables, and quest utilities.","signal":"Custom Minecraft/TypeWriter systems: extensions, MCP authoring, model-driven gameplay, and RPG tooling.","technologies":["Kotlin","Paper","TypeWriter","MCP","BetterModel","ElevenLabs"],"features":["Interactive Context Menu Extension with browser visual editor","Embedded JVM MCP Server for AI-assisted TypeWriter authoring","ModelEngine/BetterModel combat, mounted, animation, and hitbox integrations","Voiceover, BetterHUD, LuxDialogues, video, gaze, checkpoint, and spawnable systems"],"url":"https://drmilk.dev/minecraft","image":"https://drmilk.dev/images/typewriter_mockup_1768343244577.png","media":[],"screenshotEvidence":[]},{"id":"games-of-education","title":"Games of Education","category":"Client Website","browseCategory":"Web Platforms","summary":"A polished nonprofit landing website for a gamified education association, with strong visual identity, conversion modals, contact paths, and legal footer content.","detail":"Games of Education is a production nonprofit website for an association focused on gamified learning. The site presents the mission, flagship Minecraft History project, future plans, involvement paths, team structure, contact details, Discord access, legal pages, and organization identification details through a responsive space-themed interface.","signal":"Next.js nonprofit website with bilingual navigation, gamified education storytelling, donation and volunteer enrollment flows.","technologies":["Next.js","Responsive Web","Bilingual UX","Donation Flow","Volunteer Forms","SEO Structure"],"features":["Responsive landing page with space-themed hero artwork, sticky navigation, and bilingual RO/EN language paths","Mission, impact statistics, flagship project, future plans, involvement options, team roles, and contact sections","Secure donation modal with preset/custom amounts, recurring toggle, donation summary, and payment-step handoff","Volunteer enrollment modal with profile summary, contact details, phone/city fields, and multi-step form structure"],"url":"https://drmilk.dev/web#games-of-education","image":"https://drmilk.dev/images/web-screenshots/GOE/Full_landing.png","media":[],"screenshotEvidence":[{"id":"goe-full-landing-manual","projectId":"games-of-education","pageId":"landing","featureIds":["bilingual-navigation","narrative-landing-page","contact-and-newsletter","legal-and-trust-footer"],"title":"Games of Education: Full Landing Page","description":"Space-themed nonprofit landing page covering bilingual navigation, mission, project story, future plans, involvement paths, team roles, contact, Discord, and legal footer content.","image":"https://drmilk.dev/images/web-screenshots/GOE/Full_landing.png","viewport":"desktop","dimensions":"2510x6231","sourceUrl":"https://www.gamesofeducation.com/","capturedAt":"2026-07-05T15:33:14.0000000Z"},{"id":"goe-donate-modal-manual","projectId":"games-of-education","pageId":"donate-modal","featureIds":["donation-flow"],"title":"Games of Education: Donation Modal","description":"Donation step with preset and custom amounts, recurring donation toggle, donation summary, compliance messaging, and payment handoff.","image":"https://drmilk.dev/images/web-screenshots/GOE/Donate_modal.png","viewport":"desktop","dimensions":"560x1017","sourceUrl":"https://www.gamesofeducation.com/","capturedAt":"2026-07-05T15:33:50.0000000Z"},{"id":"goe-enroll-modal-manual","projectId":"games-of-education","pageId":"enroll-modal","featureIds":["volunteer-enrollment"],"title":"Games of Education: Volunteer Enrollment","description":"Volunteer recruitment modal with profile summary, contact fields, phone/WhatsApp, city, and a step-based enrollment flow.","image":"https://drmilk.dev/images/web-screenshots/GOE/Enroll_modal.png","viewport":"desktop","dimensions":"560x812","sourceUrl":"https://www.gamesofeducation.com/","capturedAt":"2026-07-05T15:34:04.0000000Z"}]},{"id":"mob-moves","title":"Mob Moves","category":"Production Platform","browseCategory":"Web Platforms","summary":"Authenticated production platform for animation curation, preview, repair, export, QA, media, store prep, and release planning.","detail":"Mob Moves is a custom internal production platform for managing large Minecraft mob animation libraries and turning them into sellable product packs. It combines product workspaces, animation library search, repair tooling, preview systems, Blockbench-safe BBModel export, MythicMobs handoff, QA tracking, media/store preparation, release planning, auth, API tokens, and audit-oriented operational tooling.","signal":"Private production OS for turning Minecraft animation libraries into sellable product packs.","technologies":["Next.js","TypeScript","Prisma","PostgreSQL","Three.js","Blockbench"],"features":["Release dashboard for readiness, blockers, stale jobs, missing media, QA, and candidates","Product workspaces connecting animations, models, generated artifacts, media, store copy, and MythicMobs config","Animation library, repair studio, preview tooling, and animation-factory workflows","Blockbench BBModel export pipeline with validation, artifact history, and stale checks"],"url":"https://drmilk.dev/web#mob-moves","image":"https://drmilk.dev/images/portfolio_mockup_1768342972395.png","media":[],"screenshotEvidence":[{"id":"mob-moves-products-manual","projectId":"mob-moves","pageId":"products","featureIds":["release-dashboard","product-workspaces","store-preparation"],"title":"Mob Moves: Product Workspaces","description":"Product readiness, product planning, animation assignments, and production workflow overview.","image":"https://drmilk.dev/images/web-screenshots/mob-moves/products.png","viewport":"desktop","dimensions":"2510x1307","sourceUrl":"https://mob-moves.com/products","capturedAt":"2026-07-05T12:36:14.9428996Z"},{"id":"mob-moves-animations-manual","projectId":"mob-moves","pageId":"animations","featureIds":["animation-library","repair-studio"],"title":"Mob Moves: Animation Library","description":"Animation catalog browsing, review, filtering, and repair-oriented workflow surface.","image":"https://drmilk.dev/images/web-screenshots/mob-moves/animations-desktop.png","viewport":"desktop","dimensions":"2510x1307","sourceUrl":"https://mob-moves.com/animations","capturedAt":"2026-07-05T12:36:14.9512182Z"},{"id":"mob-moves-animation-factory-manual","projectId":"mob-moves","pageId":"animation-factory","featureIds":["animation-factory"],"title":"Mob Moves: Animation Factory","description":"Workflow for recombining animation parts into product-ready variants.","image":"https://drmilk.dev/images/web-screenshots/mob-moves/animation-factory.png","viewport":"desktop","dimensions":"2510x1307","sourceUrl":"https://mob-moves.com/animation-factory","capturedAt":"2026-07-05T12:36:14.9515004Z"},{"id":"mob-moves-timeline-manual","projectId":"mob-moves","pageId":"timeline","featureIds":["release-dashboard","operations"],"title":"Mob Moves: Timeline Planning","description":"Release planning and operational scheduling view for animation products.","image":"https://drmilk.dev/images/web-screenshots/mob-moves/timeline.png","viewport":"desktop","dimensions":"2510x1572","sourceUrl":"https://mob-moves.com/timeline","capturedAt":"2026-07-05T12:36:14.9516983Z"}]},{"id":"edenth","title":"Edenth","category":"Client Website","browseCategory":"Web Platforms","summary":"Modern dental clinic website focused on professional presentation, service discovery, and clear contact paths.","detail":"Edenth is presented as client-facing dental clinic web work: a polished business website with treatment/service pages, clinic story, team presentation, prices, contact information, and a modern trust-building structure for a local medical audience.","signal":"Polished clinic website with treatment pages, team content, pricing, story, contact, and local-business trust signals.","technologies":["Responsive Web","SEO Structure","Service Pages","Contact UX","Business Content"],"features":["Treatment pages for dental-service discovery","Team, story, pricing, and contact pages","Professional medical tone and local-business positioning","Clear phone and contact path for appointment intent"],"url":"https://drmilk.dev/web#edenth","image":"https://drmilk.dev/images/gallery_website_mockup_1768342841364.png","media":[],"screenshotEvidence":[]},{"id":"dentistry-by-m","title":"Dentistry by M","category":"Client Website","browseCategory":"Web Platforms","summary":"Practical dental clinic website built around booking intent, service clarity, and direct local contact.","detail":"Dentistry by M is a local clinic website with hero positioning, appointment CTA, dental service categories, about content, contact form fields, phone/email/address visibility, schedule information, and a compact structure suitable for a medical business.","signal":"Appointment-focused clinic site with service sections, contact form, phone/email/address visibility, and conversion-oriented CTAs.","technologies":["Responsive Web","Appointment CTA","Contact Form","Local SEO","Service Content"],"features":["Appointment CTA and structured contact form","Dental service coverage across prevention, pediatric care, endodontics, prosthetics, orthodontics, surgery, implants, and periodontology","Clinic trust copy, hours, address, phone, and email","Simple navigation built around home, about, services, and contact"],"url":"https://drmilk.dev/web#dentistry-by-m","image":"https://drmilk.dev/images/gallery_website_mockup_1768342841364.png","media":[],"screenshotEvidence":[]},{"id":"dropshipping","title":"Dropship Automation","category":"E-Commerce Ops","browseCategory":"Automation","summary":"End-to-end dropshipping automation suite with visual scraping and inventory sync.","detail":"Automation for product monitoring, pricing checks, inventory workflows, browser scraping, and operational dashboards.","signal":"Browser automation, inventory protection, pricing logic, and operational dashboards.","technologies":["Playwright","Amazon SP-API","Next.js 16","Python"],"features":["Playwright scraping workflows","Inventory sync logic","Pricing guardrails","Operational dashboard"],"image":"https://drmilk.dev/images/dropshipping_dashboard_mockup_1768345527650.png","media":[],"screenshotEvidence":[]},{"id":"video-gen","title":"Content Studio","category":"Media Systems","browseCategory":"Media","summary":"Programmatic video editing engine for automated content generation.","detail":"A media automation system for assembling video from structured inputs, managing render jobs, and preparing repeatable content pipelines.","signal":"Programmatic video rendering, FFmpeg pipelines, and scalable media workers.","technologies":["Node.js","FFmpeg","React 18","Streams"],"features":["FFmpeg render pipeline","Template-based composition","Queue-friendly architecture","Preview-oriented UI"],"image":"https://drmilk.dev/images/video_generator_mockup_1768345942130.png","media":[],"screenshotEvidence":[]},{"id":"minecraft-store","title":"Thrones Rising / Minecraft Store","category":"Client Website","browseCategory":"Web Platforms","summary":"A branded Minecraft server website with landing content, product catalog, cart checkout, and admin management screens.","detail":"Thrones Rising was the first full website project I took over and finished. The site presents a Minecraft server brand with a visual landing page, server and Discord CTAs, store categories, rank/crate/coin pack products, cart checkout, PayPal payment surface, footer/legal areas, and admin product management.","signal":"First full website project: branded Minecraft server landing, store catalog, cart checkout, PayPal surface, and admin product management.","technologies":["Next.js","React","PayPal","Admin UI","Storefront UX"],"features":["Branded landing page with server and Discord calls to action","Storefront catalog for ranks, crate keys, and coin packs","Cart drawer with quantities, remove actions, totals, and PayPal checkout","Admin product management for products, categories, admins, orders, and editable pages"],"url":"https://drmilk.dev/web#minecraft-store","image":"https://drmilk.dev/images/web-screenshots/ThronesRising/Landing.png","media":[],"screenshotEvidence":[{"id":"thrones-rising-landing-manual","projectId":"minecraft-store","pageId":"landing","featureIds":["server-landing-page","game-server-trust-details","game-asset-presentation"],"title":"Thrones Rising: Landing Page","description":"Minecraft server landing page with branded hero, server and Discord CTAs, feature copy, carousel media, footer navigation, and server trust details.","image":"https://drmilk.dev/images/web-screenshots/ThronesRising/Landing.png","viewport":"desktop","dimensions":"2510x2660","capturedAt":"2026-07-05T17:16:04.0000000Z"},{"id":"thrones-rising-store-manual","projectId":"minecraft-store","pageId":"store","featureIds":["storefront-catalog","game-asset-presentation"],"title":"Thrones Rising: Storefront","description":"Store catalog with product categories, rank cards, prices, add-to-cart actions, server artwork, and visible cart entry point.","image":"https://drmilk.dev/images/web-screenshots/ThronesRising/Store.png","viewport":"desktop","dimensions":"2510x2359","capturedAt":"2026-07-05T17:17:00.0000000Z"},{"id":"thrones-rising-checkout-manual","projectId":"minecraft-store","pageId":"checkout","featureIds":["cart-and-paypal-checkout"],"title":"Thrones Rising: Cart and Checkout","description":"Side-cart checkout with product quantities, remove actions, total calculation, PayPal button, and debit/credit card option.","image":"https://drmilk.dev/images/web-screenshots/ThronesRising/Checkout.png","viewport":"desktop","dimensions":"2510x1307","capturedAt":"2026-07-05T17:17:20.0000000Z"},{"id":"thrones-rising-admin-manual","projectId":"minecraft-store","pageId":"admin","featureIds":["admin-product-management"],"title":"Thrones Rising: Admin Management","description":"Admin management screen for products, categories, admins, orders, and editable pages, using the same branded store interface.","image":"https://drmilk.dev/images/web-screenshots/ThronesRising/Admin.png","viewport":"desktop","dimensions":"2510x2619","capturedAt":"2026-07-05T17:18:14.0000000Z"}]},{"id":"freelancing","title":"ProTeamHub","category":"Platform","browseCategory":"Web Platforms","summary":"Comprehensive freelancing marketplace with secure payments and team management.","detail":"A platform architecture for freelancers and teams, with account flows, project management, file handling, and marketplace-style workflows.","signal":"Marketplace architecture, team workflows, RBAC, escrow concepts, and SaaS dashboards.","technologies":["Next.js","MongoDB","AWS S3","NextAuth"],"features":["Team dashboards","Role-based workflow","Project and file concepts","Marketplace UX"],"image":"https://drmilk.dev/images/proteamhub-hero.png","media":[],"screenshotEvidence":[]},{"id":"valgrim","title":"Valgrim Design","category":"Creative Tech","browseCategory":"Tools","summary":"Programmatic design pipeline for automated game asset generation.","detail":"Tooling for generating and validating design assets through scripts and repeatable export workflows.","signal":"Asset automation, SVG/raster pipelines, batch tooling, and QA scripts.","technologies":["Python","SVG","Batch Scripting","Design"],"features":["Batch asset generation","SVG and raster handling","Automation scripts","Repeatable QA flow"],"image":"https://drmilk.dev/images/valgrim_design_mockup_1768346763078.png","media":[],"screenshotEvidence":[]},{"id":"chatbot","title":"Jerry v5.0","category":"Local AI","browseCategory":"AI / MCP","summary":"Offline-capable desktop AI assistant with voice interaction.","detail":"A desktop assistant experiment focused on local AI interaction, voice, and responsive utility UI.","signal":"Offline AI assistant patterns, local inference, TTS, and desktop responsiveness.","technologies":["Python","PyTorch","Blenderbot","Tkinter"],"features":["Local assistant UI","Voice interaction","Tkinter app shell","Offline-capable workflows"],"image":"https://drmilk.dev/images/chatbot_ui_mockup_1768342291768.png","media":[],"screenshotEvidence":[]},{"id":"timer","title":"Flux Timer","category":"UI Engineering","browseCategory":"Tools","summary":"Interactive countdown timer with physics-based dial controls.","detail":"A compact desktop tool with custom canvas rendering, interaction polish, and timer workflows.","signal":"Custom desktop tooling, canvas rendering, and physics-based interactions.","technologies":["Python","Tkinter Canvas","Physics"],"features":["Canvas-rendered timer","Physics dial interaction","Desktop utility workflow","Focused UI"],"image":"https://drmilk.dev/images/timer_app_mockup_1768342409074.png","media":[],"screenshotEvidence":[]}],"typewriter":{"overview":"The TypeWriter case study is the primary Minecraft systems showcase. It includes custom extensions, player interaction systems, authoring tools, model-driven gameplay, dialogue/media integrations, quest utilities, server setup, model and asset workflows, and Dacia RPG quest work.","stats":[{"label":"Custom Extensions","value":"18","detail":"TypeWriter modules and server systems"},{"label":"Primary Role","value":"Systems","detail":"Plugin logic, integrations, automation"},{"label":"Core Stack","value":"Kotlin","detail":"Paper, TypeWriter, MCP, BetterModel"},{"label":"Support Work","value":"Infra","detail":"Linux, Docker, Pterodactyl, Nginx"}],"capabilities":["Minecraft plugin developer focused on functional systems, RPG mechanics, TypeWriter extensions, and plugin integration.","Minecraft setup/configuration specialist comfortable connecting quests, NPCs, models, economy, dialogue, resource packs, and server tooling.","Web/backend developer who can build dashboards, nonprofit sites, marketplaces, Discord bots, automations, and production server deployments.","Technical model/animation workflow builder, especially around animated model integration, Mixamo/Cascadeur/Blockbench workflows, and gameplay-ready models."],"sections":[{"id":"roles","label":"Production Range","title":"Where this work is strongest.","description":"Minecraft gameplay engineering, TypeWriter extension work, server setup, automation, and web/backend systems."},{"id":"extensions","label":"Extensions","title":"Custom TypeWriter systems.","description":"Gameplay tools, player-facing mechanics, authoring utilities, and infrastructure built around real server needs."},{"id":"models","label":"Models / Assets","title":"Visual and animation work.","description":"Model integration, generated resource-pack output, glyph assets, animation preparation, and gameplay-ready presentation work."},{"id":"quests","label":"Quests","title":"Dacia quest work: story, objectives, and custom systems.","description":"Act I turns village professions, training, resource gathering, riding, archery, honey collection, and a bear hunt into playable Minecraft progression."},{"id":"ops","label":"Server Ops","title":"The server work matters too.","description":"Minecraft systems often fail at the seams between plugins, hosting, websites, deployment, and operations. This section makes that capability explicit."}],"extensions":[{"id":"context-menu","title":"Interactive Context Menu","category":"Player Interaction","summary":"A radial/context menu system inside Minecraft that avoids inventory GUIs and supports browser-based visual authoring.","purpose":"Give servers a polished command wheel for NPCs, mounts, machines, quest choices, and custom objects without forcing players into chest-style menus.","serviceValue":"Premium interaction extension for RPG/adventure servers that need modern UI behavior, resource-pack glyph support, and a browser editor for faster iteration.","implementation":["Defines TypeWriter entries for context menu interaction events, open menu actions, menu definitions, instances, items, presets, submenus, and control items.","Serves a Ktor/Netty browser editor from the plugin for visual editing, draft application, API-based instance updates, and asset generation.","Generates texture/font resource-pack assets and calibrates glyph slots for item-backed menu visuals."],"dependencies":["TypeWriter","Paper","Ktor/Netty","Minecraft resource packs"],"setupNotes":["Requires resource-pack output or integration with an existing pack pipeline.","Best sold with a short setup video showing menu creation, visual tuning, and in-game test flow."],"technicalDetails":["Supports radial pages, submenus, disabled states through criteria, held-item filters, sneak-state filters, and cancelable interactions.","Supports action/control items and per-item criteria.","Useful for object menus, mount controls, RPG choices, and machine/object commands."],"useCases":["Mount, vehicle, NPC, machine, or object command wheels.","Quest choices that feel diegetic instead of opening an inventory.","Browser-assisted editing for designers who need to tune menu visuals quickly."],"technologies":["Kotlin","TypeWriter","Paper","Ktor","Resource Pack Glyphs"],"media":[]},{"id":"mcp","title":"Embedded MCP Authoring Server","category":"AI Authoring","summary":"An embedded Model Context Protocol server that lets external tools and AI agents manage TypeWriter content safely.","purpose":"Speed up quest/dialogue authoring by letting AI and external tools inspect, create, repair, translate, and manage TypeWriter content from controlled tools.","serviceValue":"Authoring accelerator for teams that need AI-assisted quest, dialogue, translation, and voiceover workflows inside a controlled Minecraft tooling stack.","implementation":["Runs inside the Minecraft/TypeWriter runtime without requiring a separate Node sidecar.","Exposes controlled JSON-RPC/MCP tools for blueprint inspection, entry creation, content repair, translations, voiceover generation, and server operations.","Adds validation and repair flows to prevent malformed AI-generated JSON from breaking content."],"dependencies":["TypeWriter","MCP clients","ElevenLabs optional","JSON-RPC"],"setupNotes":["Should be deployed behind explicit access controls.","Needs clear operator documentation before being sold or reused externally."],"technicalDetails":["Includes rate limiting, page-context validation, MP3/OGG utilities, and controlled server operations.","Can generate localized voiceover assets and update sound/resource-pack metadata.","Designed for authoring and repair, not player-facing gameplay."],"useCases":["AI-assisted quest and dialogue authoring.","Repairing malformed entry JSON before it breaks live content.","Generating localized voiceover assets and resource-pack sound updates."],"technologies":["Kotlin","MCP","JSON-RPC","ElevenLabs","TypeWriter"],"media":[]},{"id":"model-engine","title":"ModelEngine / BetterModel Integrations","category":"Model Gameplay","summary":"Model-driven entity systems for animations, hitboxes, combat actors, mounts, skins, equipment, and cinematics.","purpose":"Turn animated models into gameplay actors instead of static decoration: combat entities, mounts, cutscene props, and interactive world objects.","serviceValue":"Integration package for servers that already use BetterModel/ModelEngine and need custom behavior, animation control, mounts, hitboxes, or combat logic around models.","implementation":["Controls custom model entities, attachments, bone equipment, player skins, debug controls, animation settings, body rotation, and model cinematics.","Adds combat actor behavior with targeting, skills, windup/commit/recovery timing, threat handling, chase/retreat phases, and hurt reactions.","Supports mounted player models with movement rules, stamina, particles, mounted animations, bone dynamics, terrain tilt, and diagnostic rotation."],"dependencies":["BetterModel or ModelEngine","TypeWriter","Paper","Resource pack/model assets"],"setupNotes":["BetterModel itself is not authored here; the value is the custom integration, behavior, and workflow around it.","Media should show the model, animation state, hitbox/combat behavior, and the gameplay result."],"technicalDetails":["Good for animated RPG NPCs, bosses, rideable models, and props with gameplay hitboxes.","Separates technical integration from pure model art.","Can be sold as bespoke server implementation work."],"useCases":["Animated RPG NPCs and boss encounters.","Mounted gameplay systems such as horses, wagons, or custom rideable models.","Cutscenes and interactive model props with gameplay hitboxes."],"technologies":["Kotlin","ModelEngine","BetterModel","Paper","TypeWriter"],"media":[]},{"id":"spawnables","title":"Spawnables Registry","category":"World State","summary":"Persistent and transient spawnable instances with gaze, interaction, facts, registry storage, and per-player scoping.","purpose":"Let quests and systems create durable or player-scoped world objects with state, interactions, and cleanup behavior.","serviceValue":"Useful as a developer extension for serious RPG servers that need persistent props, collectibles, or per-player quest objects.","implementation":["Adds actions to add/remove instances, iterate records, and execute scoped simple actions.","Stores spawn records and active contexts for player-specific world props or interactive objects.","Supports permanent and variable-backed facts, gaze-record audiences, criteria audiences, pinned/transient groups, and dynamic individual instances."],"dependencies":["TypeWriter","Paper","Gson/artifact storage"],"setupNotes":["Needs clear naming conventions for records and cleanup policies before use on production worlds."],"technicalDetails":["Supports quest logic that needs durable object state.","Can create player-specific collectibles and props.","Works well with gaze-targeted interactions."],"useCases":["Per-player collectibles, props, interactive objects, and story state.","Gaze-targeted interactions against spawned records.","Quest logic that needs durable object state."],"technologies":["Kotlin","TypeWriter","Gson","Persistent Artifacts"],"media":[]},{"id":"dialogue","title":"Voiceover, BetterHUD, LuxDialogues","category":"Dialogue / HUD","summary":"Dialogue and HUD systems that synchronize text, sounds, options, popups, and inventory-change feedback.","purpose":"Make RPG dialogue and reward feedback feel complete through synced voice, HUD popups, option dialogue, sounds, and resource-pack driven presentation.","serviceValue":"Setup and integration package for story servers that need voiced dialogue, polished reward feedback, and coherent HUD behavior.","implementation":["Voiceover entries add spoken, action-bar, and option dialogues with timed sounds.","BetterHUD integration adds item popups, inventory hash watching, inventory gain/loss events, and custom popup variables.","LuxDialogues integration adds NPC metadata, spoken/option/action-bar Lux dialogue, cinematic dialogue segments, popup sounds, typing sounds, and selected option context."],"dependencies":["TypeWriter","BetterHUD","LuxDialogues","Resource packs"],"setupNotes":["Requires consistent sound naming and resource-pack build workflow for voiceover-heavy projects."],"technicalDetails":["Supports voiced RPG conversations with branching option selection.","Can show reward/item popups when inventories change.","Works well with cinematic dialogue sequences."],"useCases":["Voiced RPG conversations with branching option selection.","Reward/item popups when inventories change.","Cinematic dialogue sequences with synchronized sound timing."],"technologies":["Kotlin","BetterHUD","LuxDialogues","TypeWriter","Resource Packs"],"media":[]},{"id":"video","title":"Video & Cinematics","category":"Media Systems","summary":"In-game video/cinematic playback using map screens, texture overlays, color mixers, FFmpeg, and YouTube/source resolution.","purpose":"Bring tutorials, cutscenes, lore, transitions, and atmospheric videos into Minecraft experiences.","serviceValue":"Cinematic/media extension or custom implementation for servers that want in-world video, tutorials, lore displays, or story presentation.","implementation":["Supports map video cinematics with anti-tear buffering, dithering, preload queues, frame dropping, full-screen camera placement, and item-frame packet control.","Includes texture-overlay video cinematics and color mixer cinematics for full-screen transitions and atmosphere.","Provides cache commands and supporting FFmpeg, yt-dlp/NewPipe, map encoding, and NMS packet utilities."],"dependencies":["FFmpeg","yt-dlp/NewPipe optional","TypeWriter","NMS packets"],"setupNotes":["Needs media cache sizing, performance testing, and clear video length/resolution recommendations."],"technicalDetails":["Useful for tutorial videos, cutscenes, lore displays, and full-screen transitions.","Designed as a reusable media pipeline for resource-pack-driven experiences.","Requires strong demo videos to sell well."],"useCases":["Tutorial videos, cutscenes, lore displays, or server advertisements inside Minecraft.","Full-screen cinematic transitions during quests.","Reusable media pipeline for resource-pack-driven experiences."],"technologies":["Kotlin","FFmpeg","Map Packets","yt-dlp","TypeWriter"],"media":[]},{"id":"resource-pack","title":"Resource Pack Readiness","category":"Client State","summary":"Audience, fact, and event entries that detect whether a player has loaded the required resource pack.","purpose":"Prevent custom models, sounds, videos, and HUD systems from triggering before the client is ready.","serviceValue":"Small but valuable support extension for servers with resource-pack-heavy gameplay.","implementation":["Tracks pack status per player and exposes resource-pack-loaded audience filters, facts, and events.","Includes status context keys so flows can branch based on readiness."],"dependencies":["Paper","TypeWriter","Resource packs"],"setupNotes":["Pair with fallback messaging for players who reject or fail resource-pack loading."],"technicalDetails":["Can delay custom models, sounds, videos, or HUD flows until the client is ready.","Can show fallback instructions when a player has not loaded the pack."],"useCases":["Delay custom models, sounds, videos, or HUD flows until the client is ready.","Show fallback instructions when a player has not loaded the pack.","Protect immersive systems from being triggered on unprepared clients."],"technologies":["Kotlin","Paper","TypeWriter","Resource Packs"],"media":[]},{"id":"gaze","title":"Gaze & Attention Filters","category":"Interaction Logic","summary":"Audience filtering based on whether players are looking at TypeWriter entities.","purpose":"Show prompts and trigger logic only when the player is actually paying attention to the relevant object or NPC.","serviceValue":"Best as a utility extension bundled into RPG interaction packages.","implementation":["Checks per-player entity positions, distance, horizontal/vertical angles, optional line of sight, inversion, and sticky tick windows.","Designed for prompts and interactions that should only appear when attention is focused."],"dependencies":["TypeWriter","Paper vector math"],"setupNotes":["Tune angle/distance values per interaction so prompts do not feel noisy."],"technicalDetails":["Supports inspection prompts and attention-gated object interactions.","Reduces UI clutter by showing hints only at the right time."],"useCases":["Inspection prompts when looking at an object.","NPC/object interactions that require attention.","Reducing UI clutter by showing hints only at the right time."],"technologies":["Kotlin","Vector Math","TypeWriter"],"media":[]},{"id":"checkpoint","title":"Checkpoint & Utility Systems","category":"Quest Tooling","summary":"Save/restore player fact snapshots and provide reusable utilities for objectives, variables, boss bars, repeated actions, and global monitors.","purpose":"Make complex quest development easier to test, recover, and maintain.","serviceValue":"Developer-facing extension set for teams building larger TypeWriter quest packs.","implementation":["Checkpoint stores fact, position, and inventory snapshots in artifacts and can restore them for players.","Utility entries support multi-track/untrack quest actions, repeated actions, calculated boss bars, multi-objective lines, context-scope variables, variable-value facts, and global condition monitors."],"dependencies":["TypeWriter","Artifact storage"],"setupNotes":["Document which facts/inventory states are captured for each checkpoint type."],"technicalDetails":["Supports repeatable quest testing and rollback points.","Reduces duplicated TypeWriter wiring in complex RPG flows."],"useCases":["Repeatable quest testing and rollback points.","Timed objectives, global triggers, and clean quest HUD display.","Reducing duplicated TypeWriter wiring in complex RPG flows."],"technologies":["Kotlin","TypeWriter","Artifacts","Quest Logic"],"media":[]},{"id":"server-setup","title":"Server Setup & Operations","category":"Infrastructure","summary":"Linux, Pterodactyl, Docker, Nginx, reverse proxy, backups, logs, domains/SSL, and production stability work.","purpose":"Keep Minecraft/web systems deployable, debuggable, and recoverable in production.","serviceValue":"Setup and operations work for teams that need the server online, backed up, routed, secured, and maintainable.","implementation":["Commission work included bare-metal Linux setup, Pterodactyl, Docker, Wings, Nginx, multiple nodes, Velocity/minigame routing, and main-server operations.","Games of Education hosting uses Linux, systemd, Nginx, HTTPS, and reverse proxying to a production Node/Express/Next process."],"dependencies":["Linux","Docker","Pterodactyl","Nginx","systemd"],"setupNotes":["Strong proof includes uptime, topology diagrams, backup policy, and deployment notes."],"technicalDetails":["Covers logs, services, backups, firewall/security basics, and reverse proxying.","Connects game servers, websites, dashboards, and automation services."],"useCases":["Stable production Minecraft infrastructure.","Recoverable deployments with logs, services, backups, and security basics.","Connecting game servers, websites, dashboards, and automation services."],"technologies":["Linux","Docker","Pterodactyl","Nginx","systemd"],"media":[]}],"modelsAndAssets":[{"id":"animation-pipeline","title":"Animation-First Model Pipeline","type":"Models & Animation","status":"With Media","summary":"Technical workflow for importing GLB/Mixamo animations, preparing them through modified Blockbench behavior, and editing custom motion in Cascadeur/Blender-compatible pipelines.","details":["Modified Blockbench workflow for animation import/prep.","Mixamo, Cascadeur, and Blender compatibility work.","Examples include lazy miner, bench sitting, mining, forge bellows, and animated player model replacement."],"media":[{"id":"media-1781952120037","kind":"video","title":"Mixamo","caption":"","url":"https://drmilk.dev/api/uploads/portfolio/mixamo-showcase-1781952282626.mp4"},{"id":"media-1781952300203","kind":"video","title":"Cascadeur","caption":"","url":"https://drmilk.dev/api/uploads/portfolio/cascadeur-1781952377210.mp4"}]},{"id":"resource-pack-assets","title":"Resource-Pack / Glyph Assets","type":"Textures & UI Assets","status":"Ready for media","summary":"Generated glyphs, menu textures, font JSON, and resource-pack outputs used by the Interactive Context Menu and HUD systems.","details":["Works with folder/zip pack output and Nexo-style external pack setups.","Positions asset work as technical asset integration, not pure texture art.","Supports screenshots, generated pack assets, and texture previews."],"media":[]},{"id":"medieval-items","title":"Medieval RPG Props","type":"Models & Assets","status":"With Media","summary":"A collection of custom medieval-style props and tools created for an RPG Minecraft server. The assets were designed to support village life, crafting professions, farming, forging, and environmental storytelling.","details":["Includes pottery, wooden containers, tools, farming equipment, furniture, and forge-related props.","Created for a medieval RPG setting where objects are used as part of quests, professions, and immersive world building.","Built with a Minecraft-friendly low-poly style while keeping the shapes readable and suitable for resource-pack or model-based gameplay."],"media":[{"id":"media-1781952964308","kind":"image","title":"Vase with Rope","caption":"A medieval-style clay vessel with rope detailing, designed as a decorative or storage prop for village and crafting areas.","url":"https://drmilk.dev/api/uploads/portfolio/vase-with-rope-1781952983257.png"},{"id":"media-1781952984505","kind":"image","title":"Wooden Bucket","caption":"A rustic wooden bucket model suitable for wells, farms, workshops, and village environments.","url":"https://drmilk.dev/api/uploads/portfolio/wooden-bucket-1781953007987.png"},{"id":"media-1781953008971","kind":"image","title":"Hatchet","caption":"A compact medieval hand axe/hatchet prop for woodcutting, survival tasks, or NPC profession scenes.","url":"https://drmilk.dev/api/uploads/portfolio/hatchet-1781953032286.png"},{"id":"media-1781953033442","kind":"image","title":"Hoe","caption":"A simple farming tool designed for agricultural areas, crop quests, and village workstations.","url":"https://drmilk.dev/api/uploads/portfolio/hoe-1781953051664.png"},{"id":"media-1781953053070","kind":"image","title":"Clay Pitcher","caption":"A handmade clay pitcher suitable for kitchens, taverns, storage areas, and medieval domestic scenes.","url":"https://drmilk.dev/api/uploads/portfolio/image-1781953071638.png"},{"id":"media-1781953074956","kind":"image","title":"Scythe","caption":"A large farming scythe designed for crop fields, rural NPCs, and medieval harvesting scenes.","url":"https://drmilk.dev/api/uploads/portfolio/scythe-1781953092691.png"},{"id":"media-1781953094284","kind":"image","title":"Sickle","caption":"A curved harvesting tool suited for farming quests, crop gathering, and medieval worker props.","url":"https://drmilk.dev/api/uploads/portfolio/sickle-1781953108325.png"},{"id":"media-1781953110326","kind":"image","title":"Wooden Stool","caption":"A simple rustic stool for homes, workshops, taverns, and NPC interaction areas.","url":"https://drmilk.dev/api/uploads/portfolio/stool-1781953124418.png"},{"id":"media-1781953126640","kind":"image","title":"Wooden Table","caption":"A large wooden table prop for village interiors, crafting stations, shops, or medieval meeting areas.","url":"https://drmilk.dev/api/uploads/portfolio/table-1781953141045.png"},{"id":"media-1781953143709","kind":"image","title":"Clay Vase","caption":"A low-poly clay vase designed as a decorative environmental prop for medieval village builds.","url":"https://drmilk.dev/api/uploads/portfolio/vase-1781953159628.png"}]}],"questObjectiveSystems":[],"demosAndMedia":[{"id":"demos-1781951812448","title":"New Entry","type":"Media","status":"Draft","summary":"","details":[],"media":[]}],"questNarratives":[{"id":"dacia-act-1-village","title":"The Village","arc":"Act I campaign structure","summary":"A village campaign built as a sequence of NPC-led professions and escalating survival tasks. The player starts by helping the baker, moves into mining and blacksmith work, learns riding and archery, then follows the hunter into a bear-tracking finale.","playerJourney":["Meet Fane the Baker and follow a child through the fields to gather millet and spinach.","Cook Dacian stew by filling the pot with water, adding ingredients, waiting for the cook timer, portioning bowls, and delivering food.","Carry the story forward by delivering the stew to Fane the Blacksmith, moving naturally from village life into craft progression."],"customSystems":["Quest-state facts that reveal objectives only when the player reaches the correct story stage.","Inventory-count objectives for gathered crops, stew bowls, tools, ore, ingots, honeycomb, arrows, and quest rewards.","NPC interaction gates that move the story between named villagers without exposing TypeWriter logic to the player."],"missionObjectives":["Gather 3 millet and 3 spinach.","Keep pace with the guide NPC.","Use the cooking pot sequence: water, ingredients, timer, bowls.","Return to the baker and deliver stew to the blacksmith."],"evidence":["Built from 11 quest pages and 88 objective entries in the Act I export.","Uses interact entity, location, completable, region, timer, inventory, and permanent-fact objectives."]},{"id":"dacia-blacksmith-chain","title":"Mining, Smelting, and Knife Forging","arc":"Production-craft quest chain","summary":"A hands-on craft sequence where the player mines ore, handles a furnace process, moves a bloom, forges an ingot, and turns it into a knife for the next story beat.","playerJourney":["Travel to the miner, pick up the pickaxe, and break metal nodes into ore.","Operate the furnace: find the pail, move charcoal and ore, wait for the melt, break the shell, grab tongs, and move the bloom.","Finish the blacksmith sequence by placing the ingot in the forge, picking up tongs and a hammer, striking the metal through staged progress, quenching the blade, and handing over the finished knife."],"customSystems":["Multi-stage forge state managed by permanent facts and inventory checks.","Tool-dependent objectives that react to pickaxe, bucket, tongs, hammer, bloom, ingot, and knife states.","Progressive objective text that reflects how many logs, hits, ingredients, or materials have already been added."],"missionObjectives":["Crumble 4 metal nodes into ore.","Fill the pail with charcoal and ore, then pour both into the furnace.","Break the furnace shell, move the bloom, forge the ingot, and collect it.","Heat, hammer, and quench the knife before returning it to the blacksmith."],"evidence":["The forging chain alone contains staged objectives for fuel, heat, tool pickup, anvil placement, hit counts, quenching, and NPC handoff.","The design reads as gameplay, but the implementation is driven by custom state machines inside TypeWriter facts."]},{"id":"dacia-training-and-honey","title":"Riding, Archery, and the Honey Job","arc":"Training and world-interaction branch","summary":"The campaign widens from village production into outdoor traversal and precision tasks: the player earns a horse, clears hurdles, trains with a bow, and solves a honey-gathering task around living hives.","playerJourney":["Speak with the stablemaster, mount the horse, ride to the arena, and clear three checkpoint hurdles.","Pick up the bow and arrows, move into the archery yard, shoot a first set of targets, climb the tower, then complete longer-range shots.","Visit the flower glade, gather honeycomb with a stick, return to the blacksmith, then revisit the hives to put honey back into the correct nests."],"customSystems":["Mounted objective flow using horse-mounted state, location checks, timed checkpoint facts, and arena progression.","Archery target progression using region checks and timed hit facts across ground and tower stages.","Bee nest state using block data, display definitions, replenish timers, nest capacity facts, and per-nest honey counters."],"missionObjectives":["Take the horse and complete three riding checkpoints.","Shoot four ground targets, climb the tower, then shoot the final target set.","Collect honeycomb from hives, track nest counts, and return honey to specific nests."],"evidence":["The honey quest page includes block data, shared entity instances, criteria audiences, timers, and nest-state facts.","The training chain proves the quest system can combine movement, mounted gameplay, region logic, and precision target triggers."]},{"id":"dacia-bear-hunt","title":"The Bear Hunt Finale","arc":"Tracking, combat, and story payoff","summary":"The Act I finale turns earlier preparation into a guided hunt. The player follows Fane the Hunter, searches for clues, spawns and fights the bear, retrieves the heart, and carries the story into a portal transition.","playerJourney":["Follow the hunter into the forest and discover three clues in order.","Use the clues to locate the bear, trigger the encounter, fight it, and finish the wounded state.","Pick up the heart, deliver it to the healer, and move through the portal once the transition is ready."],"customSystems":["Sequential clue facts that control the search route and reveal the next objective only after each clue is found.","Combat state for bear spawned, dying, killed, heart active, healer handoff, portal readiness, and final transition.","NPC-led pacing that connects dialogue, exploration, combat, inventory rewards, and cinematic progression."],"missionObjectives":["Follow Fane the Hunter.","Find the first, second, and third clue.","Find and fight the bear.","Pick up the heart, give it to the healer, and go through the portal."],"evidence":["The finale uses permanent facts to manage clue order, spawned combat state, reward pickup, healer delivery, and portal activation.","This is a narrative quest sequence implemented as custom gameplay state, not a static checklist."]}],"operations":[{"id":"minecraft-setup","title":"Minecraft Setup","description":"RPG/adventure servers, NPC/dialogue systems, economy/shop systems, custom item/resource-pack setups, progression systems, minigame mechanics, and general plugin integration."},{"id":"production-ops","title":"Production Operations","description":"Linux setup, deployment, backups, firewall/security basics, logs, crash debugging, performance debugging, databases, reverse proxies, domains/SSL, Docker, and Pterodactyl."},{"id":"web-automation","title":"Web + Automation","description":"Next.js/React/TypeScript systems, Discord webhooks/bots, agentic automation, dashboards, nonprofit and marketplace workflows, and backend logic."}]}}