{
  "name": "Grzegorz Hul",
  "title": "Senior Flutter Developer, AI-augmented",
  "summary": "I build Flutter apps and the AI features inside them. 8 years in software, nearly 7 of them at LIBRUS, Poland's largest ed-tech, with Flutter since 2021. I ship with Claude Code every day; every change is tested, and in company code every diff is reviewed by me.",
  "contact": {
    "email": "grzegorz.hul@gmail.com",
    "website": "https://devgreg.eu/",
    "github": "https://github.com/gregorh1",
    "linkedin": "https://www.linkedin.com/in/grzegorzhul",
    "location": "Poland (CET)"
  },
  "cv": {
    "en": "https://devgreg.eu/cv.pdf",
    "pl": "https://devgreg.eu/cv-pl.pdf"
  },
  "availability": "Open to B2B subcontracting: 8-12 h/week, async (invoice, EU VAT)",
  "experience": [
    {
      "role": "Senior Mobile Developer (Flutter)",
      "company": "LIBRUS",
      "period": "Dec 2019 - Present",
      "description": "Mobile apps of Poland's largest ed-tech: the parent and student app and the Teacher app.",
      "bullets": [
        "Developed the production parent and student app (Vue 2, Cordova; iOS, Android, Huawei; 5M+ downloads on Google Play) for nearly 7 years: 1,000+ commits, 468 tickets, 28 releases prepared.",
        "Built core features of the LIBRUS Teacher app in Flutter from 2021: offline-capable messaging, timetable, video training with certificates (~300 commits).",
        "Brought ~20 modules of the new Flutter app to WCAG 2.2 AA (screen readers, contrast tests); earlier shipped an accessibility mode with automated axe-core tests in the Cordova app."
      ]
    },
    {
      "role": "Flutter & AI Developer",
      "company": "Self-employed",
      "period": "Feb 2023 - Present",
      "description": "Own products and B2B work, built with coding agents: Flutter apps, AI backends and a self-hosted agent platform.",
      "bullets": [
        "Built 6 Flutter apps with coding agents in ~6 weeks (354 commits, ~2.4k tests); 3 are live on Google Play.",
        "Built and run AnalizaPrawna.eu: a ReAct agent with 8 tools over 527k Polish court rulings, 139 API endpoints, ~2.8k tests.",
        "Run my own infrastructure as code: 4 Linux servers with Docker Compose, Traefik, Cloudflare and a GPU for local LLMs; resolved 4 incidents with root cause, including an ISP move to CGNAT handled within a day."
      ]
    },
    {
      "role": "Junior Frontend Developer",
      "company": "E Net Production",
      "period": "Sep 2018 - Sep 2019",
      "description": "Front-end development, Katowice."
    }
  ],
  "projects": [
    {
      "title": "AnalizaPrawna",
      "type": "own product",
      "description": "AI legal analysis platform: a ReAct agent with 8 tools over 527k Polish court rulings (pgvector, self-hosted Polish embeddings on GPU, model failover). 139 API endpoints, ~2.8k tests.",
      "tech": [
        "React",
        "TypeScript",
        "Express",
        "PostgreSQL + pgvector",
        "LLM agents",
        "PayU"
      ],
      "links": {
        "live": "https://analizaprawna.eu"
      }
    },
    {
      "title": "Revelations",
      "type": "own app",
      "description": "Polish-language Flutter reader of Maria Valtorta's work: user data migrated from the old Cordova app, 1,534 chapters offline, a 714-file audiobook from self-hosted TTS, ~710 tests.",
      "tech": [
        "Flutter",
        "Riverpod",
        "Firebase",
        "XTTS-v2"
      ],
      "links": {
        "playStore": "https://play.google.com/store/apps/details?id=pl.devgreg.valtorta"
      }
    },
    {
      "title": "StepPause",
      "type": "own app",
      "description": "Android step counter with a pause button for drives and bike rides, built after Samsung Health dropped the feature: a custom Kotlin bridge to Health Connect, Play Billing, 15 languages, 670 tests.",
      "tech": [
        "Flutter",
        "Riverpod",
        "Drift",
        "Kotlin",
        "Health Connect",
        "Play Billing"
      ],
      "links": {
        "playStore": "https://play.google.com/store/apps/details?id=com.steppause.steppause"
      }
    },
    {
      "title": "devbot: agent platform",
      "type": "own platform",
      "description": "Self-hosted platform where Claude Code agents take tasks from chat and from repos, with one session per channel, and close them only against a Definition of Done with tests and visual QA. ~680 chat tasks and 239 repo tasks since April 2026.",
      "tech": [
        "Claude Code",
        "OpenClaw",
        "Agent Skills",
        "Subagents"
      ],
      "links": {}
    },
    {
      "title": "sound_clearing",
      "type": "own platform",
      "description": "AI audio and OCR platform: text-to-speech with XTTS-v2, speech-to-text with Whisper and OCR, run by 5 GPU workers behind 58 API endpoints; 611 tests.",
      "tech": [
        "Python",
        "FastAPI",
        "Whisper",
        "XTTS-v2",
        "Celery",
        "Redis",
        "Docker"
      ],
      "links": {}
    },
    {
      "title": "ksrw.pl",
      "type": "pro bono",
      "description": "Moved an association's website from Weebly to a custom static generator, redesigned with Claude Design: 47 URLs, eleven 301 redirects, Playwright checks at 6 widths gating the build.",
      "tech": [
        "Static site generator",
        "Claude Design",
        "Playwright",
        "Python"
      ],
      "links": {
        "live": "https://ksrw.pl"
      }
    },
    {
      "title": "teologiakatolicka.pl",
      "type": "pro bono",
      "description": "Migrated a legacy theology portal to Ghost 6: 858 posts, 98.8% sentence-level match with the source.",
      "tech": [
        "Ghost 6",
        "Node.js",
        "Cheerio",
        "Migration QA"
      ],
      "links": {
        "live": "https://teologiakatolicka.pl"
      }
    },
    {
      "title": "Holy See Pavilion, EXPO 2020",
      "type": "pro bono",
      "description": "Visitor guide app for the Holy See Pavilion at EXPO 2020 Dubai: 5 languages including Arabic (RTL), content from WordPress over REST. Built in 2021-2022, before AI coding tools.",
      "tech": [
        "Flutter",
        "BLoC",
        "WordPress REST API",
        "i18n + RTL"
      ],
      "links": {}
    },
    {
      "title": "blz-legal.pl",
      "type": "pro bono",
      "description": "WordPress website for a law firm, built on a child theme of Dixon (ThemeREX) in 2020.",
      "tech": [
        "WordPress",
        "PHP",
        "Child theme"
      ],
      "links": {
        "live": "https://blz-legal.pl"
      }
    }
  ],
  "skills": {
    "Mobile": [
      "Flutter (5+ years)",
      "Dart",
      "flutter_bloc",
      "Riverpod",
      "go_router",
      "Drift (offline-first)",
      "Kotlin platform code",
      "Health Connect",
      "Play Billing & IAP",
      "i18n (15 languages, RTL)",
      "Store releases",
      "Cordova"
    ],
    "AI & ML": [
      "LLM integration",
      "RAG (pgvector HNSW)",
      "Self-hosted embeddings (TEI)",
      "ReAct agents & tool calling",
      "Streaming (SSE)",
      "Model failover",
      "LLM evaluation (LLM-as-judge)",
      "Guardrails & prompt injection tests",
      "Whisper STT",
      "XTTS-v2 TTS",
      "OCR with vision models",
      "Ollama"
    ],
    "Agentic engineering": [
      "Claude Code",
      "CLAUDE.md conventions",
      "Agent Skills",
      "Subagents",
      "Hooks",
      "MCP",
      "Headless runs",
      "Claude Design"
    ],
    "Web & backend": [
      "React 19",
      "TypeScript",
      "Vite",
      "Tailwind CSS",
      "PWA",
      "Node.js / Express (TypeScript)",
      "Python / FastAPI",
      "Celery",
      "REST API",
      "PayU payments",
      "Ghost themes",
      "WordPress",
      "Go (basics)",
      "Vue 2"
    ],
    "Data & DevOps": [
      "PostgreSQL + pgvector",
      "Redis",
      "SQLite (Drift, FTS5)",
      "Firebase",
      "Linux",
      "Docker Compose",
      "Traefik",
      "Nginx",
      "Cloudflare",
      "GPU self-hosting",
      "Prometheus + Grafana"
    ],
    "Testing & quality": [
      "flutter test (unit, golden, integration)",
      "Vitest",
      "Jest",
      "pytest",
      "Playwright",
      "WCAG 2.2 AA",
      "axe-core"
    ]
  },
  "howIWork": {
    "withAI": [
      "Claude Code every day since Dec 2025 (683 sessions), with my own conventions, skills and subagents.",
      "A self-hosted agent pipeline takes tasks from chat and from repos and closes them only against a Definition of Done with tests and visual QA.",
      "A human signs off every change: in company repos every diff is tested and reviewed by me, and about two thirds of my 2026 commits are openly labelled AI-assisted."
    ],
    "together": [
      "Async and in writing (Polish, English)",
      "Fixed weekly capacity: 8-12 h/week",
      "B2B invoice (EU VAT)",
      "Happy to start with a small paid test task"
    ]
  },
  "languages": [
    {
      "name": "Polish",
      "level": "native"
    },
    {
      "name": "English",
      "level": "professional, written"
    }
  ],
  "certifications": [
    {
      "name": "AI_devs 3 Agents",
      "detail": "course on LLM apps and AI agents",
      "period": "Dec 2024",
      "url": "https://credsverse.com/credentials/8cf1b62c-4a32-4bfc-9ce8-446d7ddb1338"
    }
  ]
}
