{
  "version": "2",
  "data": {
    "name": "Dewei Zhai",
    "role": "Senior Data Engineer & Applied AI Engineer",
    "location": "Netherlands (PR)",
    "timezone": "Europe/Amsterdam (CET/CEST)",
    "domain": "zhaidewei.com",
    "summary": "Senior Data Engineer and Applied AI Engineer based in the Netherlands. Data engineering since 2016, with experience at Enyquant, PVH, VodafoneZiggo and FedEx.",
    "tagline": "Production data platforms and practical AI applications.",
    "specialties": [
      "Datalake / Lakehouse architecture (Medallion, Unity Catalog, Iceberg, Snowflake)",
      "Idempotent, config-driven ETL pipelines that survive replays, late data, and timezone edge cases",
      "100% Infrastructure-as-Code platforms (Terraform, AWS CDK, CDKTF)",
      "CDC ingestion (DMS-based and stream-based)",
      "Cross-cloud data architecture (AWS + Azure + Alibaba Cloud + GCP)",
      "Real-time and event-driven serverless data pipelines",
      "AI-augmented engineering practice (custom agents, harness engineering)"
    ],
    "certifications": [
      "AWS Certified Solutions Architect — Associate",
      "Databricks Certified Associate Developer for Apache Spark",
      "Databricks Certified Data Engineer Associate",
      "Certified Associate in Python Programming"
    ],
    "education": {
      "degree": "MSc, Communication & Information Systems",
      "institution": "Xidian University (China)",
      "equivalence": "IDW-evaluated equivalent to MSc Computing Science (NL)"
    },
    "publications": [
      {
        "title": "Peak-to-Average Power Ratio Reduction of OFDM Signals With Nonlinear Companding Scheme",
        "authors": [
          "Jun Hou",
          "Jianhua Ge",
          "Dewei Zhai",
          "Jing Li"
        ],
        "venue": "IEEE Transactions on Broadcasting",
        "year": 2010,
        "volume": 56,
        "issue": 2,
        "pages": "258–262",
        "doi": "10.1109/TBC.2010.2046970",
        "url": "https://ieeexplore.ieee.org/document/5453075"
      }
    ],
    "engagement": {
      "model": "project-based freelance",
      "retainers": false,
      "projectPricing": "Scoped and quoted individually"
    },
    "consultations": [
      {
        "id": "data-system-consultation",
        "title": "Data System Consultation",
        "priceCents": 14900,
        "currency": "eur",
        "vatIncluded": true,
        "durationMinutes": 75,
        "preReadMinutes": 30,
        "deliverables": [
          "One focused data-system decision",
          "Up to 30 minutes of pre-reading",
          "A concise written follow-up with recommendations and next steps",
          "A full satisfaction guarantee"
        ],
        "boundaries": [
          "No implementation",
          "No full architecture report",
          "Payment first; scheduling details are submitted after Stripe checkout"
        ],
        "url": "https://zhaidewei.com/consulting"
      },
      {
        "id": "freelance-transition-session",
        "title": "Freelance Transition Session",
        "priceCents": 9900,
        "currency": "eur",
        "vatIncluded": true,
        "durationMinutes": 75,
        "preReadMinutes": 0,
        "deliverables": [
          "A readiness and positioning review",
          "Discussion of target clients, rate, and first offer",
          "Practical next steps based on first-hand Netherlands experience",
          "A full satisfaction guarantee"
        ],
        "boundaries": [
          "No guarantee of clients or income",
          "No implementation or unlimited follow-up",
          "Payment first; scheduling details are submitted after Stripe checkout"
        ],
        "url": "https://zhaidewei.com/consulting"
      }
    ],
    "contact": {
      "email": "dewei.zhai@gmail.com",
      "linkedin": "https://www.linkedin.com/in/zhaidewei",
      "github": "https://github.com/zhaidewei"
    },
    "projects": [
      {
        "id": "EarlySignal Radar",
        "name": "EarlySignal Radar",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Cloudflare",
          "AI ETL",
          "Market Info"
        ],
        "liveUrl": "https://www.earlysignalradar.com",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Find high-upside startups before they become obvious hiring targets.",
        "description": "An MVP-stage data service for spotting early startup signals and turning them into a focused radar for talent, hiring, and market research."
      },
      {
        "id": "PensioenCheck",
        "name": "PensioenCheck",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Cloudflare",
          "Dutch pensions",
          "Decision support"
        ],
        "liveUrl": "https://pensioncheck.nl/",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Check pension transition risks before changing jobs in the Netherlands.",
        "description": "Compares the transition dates and compensation rules of an old and new pension scheme, then turns the remaining uncertainty into concrete questions for HR or the pension fund."
      },
      {
        "id": "AlleSchools",
        "name": "AlleSchools",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Python",
          "Vercel",
          "ETL",
          "Open data"
        ],
        "liveUrl": "https://alleschools.nl",
        "repoUrl": "https://github.com/zhaidewei/alleschools",
        "extraLinks": [],
        "tagline": "Dutch school comparison, plotted in 2D.",
        "description": "Combines Dutch primary and secondary school data in an interactive comparison tool."
      },
      {
        "id": "live.nl-dams.com",
        "name": "live.nl-dams.com",
        "status": "active",
        "period": null,
        "tags": [
          "Cloudflare",
          "Supabase",
          "Live events",
          "Real-time",
          "Audience interaction"
        ],
        "liveUrl": "https://live.nl-dams.com/ppt#1",
        "repoUrl": null,
        "extraLinks": [
          {
            "label": "live deck",
            "url": "https://live.nl-dams.com/ppt#1"
          },
          {
            "label": "event summary",
            "url": "https://live.nl-dams.com/summary"
          }
        ],
        "tagline": "Real-time audience interaction for hundred-person conferences.",
        "description": "Solves the missing audience-to-audience and speaker-to-audience interaction at industry conferences with hundreds of attendees. Live, synced deck during the session; auto-generated summary report after."
      },
      {
        "id": "agent-skills",
        "name": "agent-skills",
        "status": "active",
        "period": null,
        "tags": [
          "Codex",
          "Agent skills",
          "Guardrails",
          "Open source"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/agent-skills",
        "extraLinks": [],
        "tagline": "Reusable guardrails for maintainable agentic work.",
        "description": "A public, sanitized collection of the skills I use to help agents clean up intentionally, coordinate shared resources, and explain complex systems without carrying private client context with them."
      },
      {
        "id": "SurfSub",
        "name": "SurfSub",
        "status": "active",
        "period": null,
        "tags": [
          "Chrome extension",
          "JavaScript",
          "Language learning",
          "Local translation"
        ],
        "liveUrl": "https://zhaidewei.com/surfsub/",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Read the original and translation side by side, sentence by sentence.",
        "description": "A Chrome extension showing original text and translations side by side on X, Reddit, LinkedIn, NOS and NU.nl."
      },
      {
        "id": "DeepOefenen",
        "name": "DeepOefenen",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Vercel",
          "Dutch L2"
        ],
        "liveUrl": "https://deepoefenen.zhaidewei.com",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Make Dutch verb spelling less painful.",
        "description": "Solves the inefficient way primary-school kids and Dutch L2 learners drill werkwoordspelling rules."
      },
      {
        "id": "Yijing Divination Studio",
        "name": "Yijing Divination Studio",
        "status": "active",
        "period": null,
        "tags": [
          "JavaScript",
          "Vercel",
          "I Ching",
          "AI interpretation"
        ],
        "liveUrl": "https://yijing-divination-studio.vercel.app",
        "repoUrl": "https://github.com/zhaidewei/yijing-divination-studio",
        "extraLinks": [],
        "tagline": "I Ching divination, traditional yarrow-stalk method.",
        "description": "Solves planning and decision-making under deep uncertainty."
      },
      {
        "id": "cardshot",
        "name": "cardshot",
        "status": "active",
        "period": null,
        "tags": [
          "Rust",
          "CLI",
          "Headless Chrome"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/cardshot",
        "extraLinks": [],
        "tagline": "Screenshot every HTML element matching a CSS selector to its own PNG.",
        "description": "Solves generating social-media post images quickly with AI."
      },
      {
        "id": "molk",
        "name": "molk",
        "status": "active",
        "period": null,
        "tags": [
          "Rust",
          "CLI",
          "Microsoft Graph",
          "LLM tooling"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/molk",
        "extraLinks": [],
        "tagline": "Token-thrifty Outlook CLI for LLM agents.",
        "description": "An email CLI that solves the token waste when an LLM agent handles a mailbox directly."
      },
      {
        "id": "secret-cli",
        "name": "secret",
        "status": "active",
        "period": null,
        "tags": [
          "PowerShell",
          "Bash",
          "CLI",
          "macOS Keychain",
          "Windows Credential Manager"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/secret-cli",
        "extraLinks": [],
        "tagline": "Cross-platform OS credential storage built for agents and shell workflows.",
        "description": "Stores credentials in macOS Keychain or Windows Credential Manager and injects them into individual commands."
      },
      {
        "id": "DataCoffee",
        "name": "Data Coffee",
        "status": "graveyard",
        "period": "Mar 2026 – May 2026",
        "tags": [
          "MCP",
          "TypeScript",
          "Vercel",
          "Community"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/data_coffee",
        "extraLinks": [],
        "tagline": "MCP server for a Dutch data/AI community — agent-native, no UI.",
        "description": "Invite-only MCP server for 荷兰数据群 — a 700-person Chinese data/AI professional community in the Netherlands. Members connect their own agents and call structured tools for coffee chats, referrals, and resource sharing. The entry filter is the product itself: if you can configure an MCP server, you belong.",
        "killedBy": "Two things. (1) Agent-native habits are still early — too few members had an MCP-capable client set up to actually use it. (2) I cooled on MCP as a delivery surface: the server stays resident in the agent context and burns tokens even when idle. Next form will be a plain REST API or a CLI."
      },
      {
        "id": "ColleagueReferral",
        "name": "ColleagueReferral",
        "status": "graveyard",
        "period": "Feb 2025 – Feb 2026",
        "tags": [
          "Marketplace",
          "Hiring"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/ColleagueReferralWeb",
        "extraLinks": [],
        "tagline": "A marketplace for cold referral asks.",
        "description": "Employees posted open roles at their company; job seekers asked for referrals directly. The pitch: lower hiring cost for companies, referral bonuses for employees, a faster signal for candidates.",
        "killedBy": "Dutch hiring runs on warm referrals — employees were reluctant to put their professional reputation behind strangers, so supply stayed thin. We were not a strong operations team; after exhausting agency contacts and our own network, traffic plateaued at 568 registered users. Ran in silent mode until the domain expired.",
        "lesson": "Marketplaces only reveal their cultural limits in the wild — and traffic operations matter more than I had credited."
      },
      {
        "id": "RenToken",
        "name": "RenToken",
        "status": "graveyard",
        "period": "ETH Hackathon 2025",
        "tags": [
          "Solidity",
          "Web3",
          "RWA"
        ],
        "liveUrl": "https://www.rentoken.world/",
        "repoUrl": "https://github.com/rentoken-world/rentoken-contracts",
        "extraLinks": [],
        "tagline": "RWA tokenization for real-estate rent streams.",
        "description": "Explored putting real-world rent flows on-chain. I designed the Ethereum smart-contract layer.",
        "killedBy": "Web3 hit real-world policy and regulatory walls — non-technical."
      }
    ],
    "sideProjects": [
      {
        "id": "EarlySignal Radar",
        "name": "EarlySignal Radar",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Cloudflare",
          "AI ETL",
          "Market Info"
        ],
        "liveUrl": "https://www.earlysignalradar.com",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Find high-upside startups before they become obvious hiring targets.",
        "description": "An MVP-stage data service for spotting early startup signals and turning them into a focused radar for talent, hiring, and market research."
      },
      {
        "id": "PensioenCheck",
        "name": "PensioenCheck",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Cloudflare",
          "Dutch pensions",
          "Decision support"
        ],
        "liveUrl": "https://pensioncheck.nl/",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Check pension transition risks before changing jobs in the Netherlands.",
        "description": "Compares the transition dates and compensation rules of an old and new pension scheme, then turns the remaining uncertainty into concrete questions for HR or the pension fund."
      },
      {
        "id": "AlleSchools",
        "name": "AlleSchools",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Python",
          "Vercel",
          "ETL",
          "Open data"
        ],
        "liveUrl": "https://alleschools.nl",
        "repoUrl": "https://github.com/zhaidewei/alleschools",
        "extraLinks": [],
        "tagline": "Dutch school comparison, plotted in 2D.",
        "description": "Combines Dutch primary and secondary school data in an interactive comparison tool."
      },
      {
        "id": "live.nl-dams.com",
        "name": "live.nl-dams.com",
        "status": "active",
        "period": null,
        "tags": [
          "Cloudflare",
          "Supabase",
          "Live events",
          "Real-time",
          "Audience interaction"
        ],
        "liveUrl": "https://live.nl-dams.com/ppt#1",
        "repoUrl": null,
        "extraLinks": [
          {
            "label": "live deck",
            "url": "https://live.nl-dams.com/ppt#1"
          },
          {
            "label": "event summary",
            "url": "https://live.nl-dams.com/summary"
          }
        ],
        "tagline": "Real-time audience interaction for hundred-person conferences.",
        "description": "Solves the missing audience-to-audience and speaker-to-audience interaction at industry conferences with hundreds of attendees. Live, synced deck during the session; auto-generated summary report after."
      },
      {
        "id": "agent-skills",
        "name": "agent-skills",
        "status": "active",
        "period": null,
        "tags": [
          "Codex",
          "Agent skills",
          "Guardrails",
          "Open source"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/agent-skills",
        "extraLinks": [],
        "tagline": "Reusable guardrails for maintainable agentic work.",
        "description": "A public, sanitized collection of the skills I use to help agents clean up intentionally, coordinate shared resources, and explain complex systems without carrying private client context with them."
      },
      {
        "id": "SurfSub",
        "name": "SurfSub",
        "status": "active",
        "period": null,
        "tags": [
          "Chrome extension",
          "JavaScript",
          "Language learning",
          "Local translation"
        ],
        "liveUrl": "https://zhaidewei.com/surfsub/",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Read the original and translation side by side, sentence by sentence.",
        "description": "A Chrome extension showing original text and translations side by side on X, Reddit, LinkedIn, NOS and NU.nl."
      },
      {
        "id": "DeepOefenen",
        "name": "DeepOefenen",
        "status": "active",
        "period": null,
        "tags": [
          "TypeScript",
          "Vercel",
          "Dutch L2"
        ],
        "liveUrl": "https://deepoefenen.zhaidewei.com",
        "repoUrl": null,
        "extraLinks": [],
        "tagline": "Make Dutch verb spelling less painful.",
        "description": "Solves the inefficient way primary-school kids and Dutch L2 learners drill werkwoordspelling rules."
      },
      {
        "id": "Yijing Divination Studio",
        "name": "Yijing Divination Studio",
        "status": "active",
        "period": null,
        "tags": [
          "JavaScript",
          "Vercel",
          "I Ching",
          "AI interpretation"
        ],
        "liveUrl": "https://yijing-divination-studio.vercel.app",
        "repoUrl": "https://github.com/zhaidewei/yijing-divination-studio",
        "extraLinks": [],
        "tagline": "I Ching divination, traditional yarrow-stalk method.",
        "description": "Solves planning and decision-making under deep uncertainty."
      },
      {
        "id": "cardshot",
        "name": "cardshot",
        "status": "active",
        "period": null,
        "tags": [
          "Rust",
          "CLI",
          "Headless Chrome"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/cardshot",
        "extraLinks": [],
        "tagline": "Screenshot every HTML element matching a CSS selector to its own PNG.",
        "description": "Solves generating social-media post images quickly with AI."
      },
      {
        "id": "molk",
        "name": "molk",
        "status": "active",
        "period": null,
        "tags": [
          "Rust",
          "CLI",
          "Microsoft Graph",
          "LLM tooling"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/molk",
        "extraLinks": [],
        "tagline": "Token-thrifty Outlook CLI for LLM agents.",
        "description": "An email CLI that solves the token waste when an LLM agent handles a mailbox directly."
      },
      {
        "id": "secret-cli",
        "name": "secret",
        "status": "active",
        "period": null,
        "tags": [
          "PowerShell",
          "Bash",
          "CLI",
          "macOS Keychain",
          "Windows Credential Manager"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/secret-cli",
        "extraLinks": [],
        "tagline": "Cross-platform OS credential storage built for agents and shell workflows.",
        "description": "Stores credentials in macOS Keychain or Windows Credential Manager and injects them into individual commands."
      },
      {
        "id": "DataCoffee",
        "name": "Data Coffee",
        "status": "graveyard",
        "period": "Mar 2026 – May 2026",
        "tags": [
          "MCP",
          "TypeScript",
          "Vercel",
          "Community"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/data_coffee",
        "extraLinks": [],
        "tagline": "MCP server for a Dutch data/AI community — agent-native, no UI.",
        "description": "Invite-only MCP server for 荷兰数据群 — a 700-person Chinese data/AI professional community in the Netherlands. Members connect their own agents and call structured tools for coffee chats, referrals, and resource sharing. The entry filter is the product itself: if you can configure an MCP server, you belong.",
        "killedBy": "Two things. (1) Agent-native habits are still early — too few members had an MCP-capable client set up to actually use it. (2) I cooled on MCP as a delivery surface: the server stays resident in the agent context and burns tokens even when idle. Next form will be a plain REST API or a CLI."
      },
      {
        "id": "ColleagueReferral",
        "name": "ColleagueReferral",
        "status": "graveyard",
        "period": "Feb 2025 – Feb 2026",
        "tags": [
          "Marketplace",
          "Hiring"
        ],
        "liveUrl": null,
        "repoUrl": "https://github.com/zhaidewei/ColleagueReferralWeb",
        "extraLinks": [],
        "tagline": "A marketplace for cold referral asks.",
        "description": "Employees posted open roles at their company; job seekers asked for referrals directly. The pitch: lower hiring cost for companies, referral bonuses for employees, a faster signal for candidates.",
        "killedBy": "Dutch hiring runs on warm referrals — employees were reluctant to put their professional reputation behind strangers, so supply stayed thin. We were not a strong operations team; after exhausting agency contacts and our own network, traffic plateaued at 568 registered users. Ran in silent mode until the domain expired.",
        "lesson": "Marketplaces only reveal their cultural limits in the wild — and traffic operations matter more than I had credited."
      },
      {
        "id": "RenToken",
        "name": "RenToken",
        "status": "graveyard",
        "period": "ETH Hackathon 2025",
        "tags": [
          "Solidity",
          "Web3",
          "RWA"
        ],
        "liveUrl": "https://www.rentoken.world/",
        "repoUrl": "https://github.com/rentoken-world/rentoken-contracts",
        "extraLinks": [],
        "tagline": "RWA tokenization for real-estate rent streams.",
        "description": "Explored putting real-world rent flows on-chain. I designed the Ethereum smart-contract layer.",
        "killedBy": "Web3 hit real-world policy and regulatory walls — non-technical."
      }
    ],
    "links": {
      "site": "https://zhaidewei.com/",
      "agent": "https://zhaidewei.com/agent",
      "llmsTxt": "https://zhaidewei.com/llms.txt",
      "services": "https://zhaidewei.com/api/services",
      "cases": "https://zhaidewei.com/api/cases",
      "stack": "https://zhaidewei.com/api/stack",
      "openapi": "https://zhaidewei.com/openapi.json"
    }
  }
}