# Christian Roy - Backend Engineer, Cloud Architect & AI Tinkerer > Personal website of Christian Roy, a backend engineer and cloud architect > based in the province of Quebec, specializing in Node.js, Kubernetes, > PostgreSQL at scale, and AI-powered tooling. ## About Me I'm a backend engineer and cloud architect. I build and operate production systems: Node.js backends, Kubernetes clusters on GCP and AWS, PostgreSQL at scale (billions of rows), and AI tooling that actually ships. Most recently I've been the lead cloud architect and backend engineer on a healthcare/fitness platform: managing Kubernetes infrastructure, tuning PostgreSQL for datasets with billions of rows, and integrating LLMs into internal tools including a fine-tuned vision model in production, a natural language PostgreSQL interface, and a Zendesk ticket enrichment tool. I also build in the open. My MCP server for Asana (roychri/mcp-server-asana) has over 120 stars on GitHub. ## Technical Skills - **AI / LLM**: Vision model fine-tuning, LLM-powered internal tools, MCP server development - **PostgreSQL**: Production scale (billions of rows), query optimization, natural language interface - **Kubernetes**: Production cluster management, CKAD certified, GKE / EKS - **Node.js**: APIs, event-driven systems, platform backends - **Containers**: Docker, CI/CD pipelines, Kubernetes deployments - **GCP**: GKE, Cloud Run, Pub/Sub, Cloud SQL, IAM - **AWS**: EC2, EKS, Lambda, RDS, S3 - **Microservices**: Event-driven architecture, service decomposition, observability ## Domains - Healthcare & wellness technology - Fitness platform development - Enterprise SaaS / AI-as-a-Service - Mobile app backend support ## Open Source - [mcp-server-asana](https://github.com/roychri/mcp-server-asana): MCP server integrating Asana with AI agents and LLM-powered tools (120+ GitHub stars) ## TIL (Today I Learned) Short technical notes, things learned, found, or built. Written in English. - [HTTPie interprets numeric keys as array indexes, breaks Asana custom field updates](/til/httpie-asana-custom-fields-oom/index.md) - [HTTPie needs --ignore-stdin in non-TTY environments like Claude Code](/til/httpie-ignore-stdin-claude-code/index.md) - [Google DeepMind's Lyria 3 generates full songs from a photo or a sentence](/til/lyria3-music-gen/index.md) - [Claude Code runs natively as a GitHub Action](/til/claude-code-gha/index.md) - [glow strips color when called from a subprocess: force it with env vars](/til/glow-ansi-subprocess/index.md) - [LLMs struggle with Asana's strict non-standard rich text format](/til/asana-rich-text-llm/index.md) - [A website can serve a full ANSI terminal UI when curled instead of HTML](/til/curl-ansi-terminal-website/index.md) - [MCP servers support prompts as a first-class concept, separate from tools](/til/mcp-server-asana-1-1-0-prompts/index.md) - [Kimi's agent swarm runs up to 100 parallel sub-agents to escape context window limits](/til/kimi-agent-swarm-parallel-sub-agents/index.md) - [Zvec is an embedded vector database aiming to be the SQLite of vector search](/til/zvec-embedded-vector-database/index.md) - [OpenClaw custom skills silently disappear without quoted YAML descriptions and openclaw metadata](/til/openclaw-skill-frontmatter-metadata/index.md) - [Pipe Mastra agent responses through jq to colorize reasoning and tool calls in the terminal](/til/mastra-jq-ansi-agent-responses/index.md) - [You can force an LLM to only output valid answers](/til/static-constrained-decoding-gpu/index.md) - [Asana's official Claude MCP connector can't create tasks in Claude Code CLI because its tools require interactive UI](/til/asana-mcp-create-task-claude-code-cli/index.md) - [Cohere Transcribe beats Whisper Large v3 on the HuggingFace ASR leaderboard with a 2B open-source model](/til/cohere-transcribe-asr-beats-whisper/index.md) - [Tencent's Covo-Audio is a 7B end-to-end audio model with full-duplex conversation via THINK, SHIFT, and BREAK tokens](/til/covo-audio-tencent-full-duplex-audio-llm/index.md) - [Google's TurboQuant compresses LLM KV caches 6x with zero accuracy loss and near-zero indexing time](/til/turboquant-google-kv-cache-compression/index.md) - [TinyLoRA fine-tunes a 7B model to 91.8% GSM8K accuracy with only 13 parameters using RL](/til/tinylora-13-parameters-fine-tuning/index.md) - [GitAgent defines AI agents as git repos, exportable to any framework with one CLI command](/til/gitagent-ai-agents-as-git-repos/index.md) - [NVIDIA's Nemotron-Cascade 2 hits gold-medal math and coding with a 30B MoE using only 3B active parameters](/til/nemotron-cascade-2-moe-gold-medal-math-coding/index.md) - [Google's Colab MCP server lets any AI agent create and run notebooks in the cloud](/til/colab-mcp-server-ai-agents-notebooks/index.md) - [Baidu's Qianfan-OCR collapses the multi-stage OCR pipeline into one 4B model with Layout-as-Thought](/til/qianfan-ocr-layout-as-thought-document-intelligence/index.md) - [NVIDIA's OpenShell enforces AI agent guardrails outside the agent process so a compromised agent can't override them](/til/nvidia-openshell-out-of-process-agent-guardrails/index.md) - [Unsloth Studio is an open-source no-code UI for training and running local LLMs](/til/unsloth-studio-no-code-local-llm-training/index.md) - [Mistral Small 4 merges instruct, reasoning, and coding into one model with per-request reasoning effort](/til/mistral-small-4-unified-instruct-reasoning-coding/index.md) - [OpenViking: A context database using filesystem paradigm for AI agents](/til/openviking-context-database-ai-agents/index.md) - [GLM-OCR: A 0.9B document parsing specialist beats 235B models](/til/glm-ocr-zhipu-ai-document-parsing-specialist/index.md) - [Gemini 3.1 Flash Live: Low-latency voice AI with native audio output](/til/gemini-3-1-flash-live-low-latency-voice-ai/index.md) - [opencode with a local Qwen3.6-35B-A3B backend iterated to a working color-physics web toy](/til/opencode-local-qwen36-35b-a3b-color-physics-web-toy/index.md) - [NOVA-FM: an endless AI radio station built on Stable Audio 3](/til/novafm-endless-ai-radio-station-stable-audio-3/index.md) - [The RAID Array That Kept Losing a Disk on Every Reboot](/til/raid-array-losing-disk-every-reboot/index.md) ## Technical Documentation - [Asana Rich Text API Reference](/docs/api/asana-rich-text-api.md): Guide to Asana's rich text HTML tags and formatting for API integration ## Contact - [LinkedIn](https://ca.linkedin.com/in/roychri): best way to reach me - [GitHub](https://github.com/roychri) - [Contact Page](/contact) ## Availability Currently on a full-time contract. Available for additional contracts only, no permanent positions. Side contracts (~15 hrs/week, evenings and weekends) are occasionally possible, ask. Locations: Downtown Montreal, North Shore Montreal, or remote. Not interested in opportunities in the adult entertainment or casino industries.