I specialize in building web front-end applications (Next.js/React.js/Node.js/Express) with production experience in MongoDB, Redis, Docker, AWS and more out of Vancouver, Canada.
TL;DR: I build custom websites that scale using modern technology from start to finish or as a part of a team.
Meta: See the code I used to build & deploy this page on GitHub.
Read this CV as a PDF: Download.
My VS Code as I edit this web page.
Please note that I’ve arranged my experience in order of relevance. Below, you’ll find my entrepreneurial roles, open-source contributions, and education summary.
Senior Software Engineer. Remote/Vancouver.
After my exit with QxMD, I continued my role at WebMD with integration and compliance responsibilities on the same stack but with more diverse APIs, codebases, management software, and stakeholders.
Senior Software Engineer. Vancouver.
QxMD (now part of Medscape/WebMD) served medical professionals with interactive tools, a learning portal, and a scientific journal registry. I was the first full-time front-end engineer responsible for rewriting all the web applications and associated components.
In my first year, I transformed the company’s two main ten-year-old Perl/PHP/CSS/JQuery codebases into fast, SEO-friendly Next.js applications structured for easy readability and safe deployments with good unit and integration test coverage (various CI tech, from GitHub Actions to Jenkins to GitLab) and TypeScript.
Later the same year, I took over the Node.js/Pug project (learning portal) with TypeForm integration and rewrote it in React.js. My side quest was to build a JavaScript package for collecting and transmitting user interaction events in full compliance with GDPR.
By the end of my first year, QxMD was sold to WebMD. As a part of the founding team, I got to exercise my options.
Web Producer. Toronto.
Kobo is a Canadian e-reader and a bookseller that’s now owned by a Japanese retail giant. I built accessible and widely compatible email templates (which was very difficult at the time due to the email clients’ archaic rendering engines) and responsive microsites (vanilla HTML, SASS, & vanilla JavaScript) using the best practices of the time.
Web Developer and Art Director. Toronto.
Henning Solutions was a software engineering firm that built e-commerce websites and a video streaming service for children. I engineered various web components in PHP (and limited ASP.NET) with front-ends made with MooTools and SASS. See Dmitri’s Animation for a career link.
Matter tech accelerator group shot with Eureka King.
I worked in a variety of capacities as a founder of three Canadian and one US-based businesses. This section summarizes a few highlights from this journey.
Founding Editor and Engineer. Chiang Mai/Vancouver.
Analog.Cafe is a Canadian web publishing/content platform with a custom CMS built mainly in Node/Next.js and a visual editor made with Slate.js. It uses MongoDB/Redis for content storage and user accounts/actions and integrates with Sendgrid and Cloudinary. It uses Passport.js for SSO and one-time-code authentication.
Analog.Cafe is a blog with public contributions (100+ authors). It has a growing readership of 100K UMV, 14K email subscribers, and hundreds of paying customers via Stripe.
I built many types of tools and apps to extend the website’s functionality. The most capable is a K8S deployment with autoscaling via Keda and an in-house queue management with MongoDB written in Typescript. This deployment uses libvips
, sharp
, libraw
, and Dropbox API via Node.js (written with TypeScript) to batch-invert film negatives (typically large image files, up to 300 MiB) in the cloud.
filmQ film negative inversion app.
CTO. San Francisco/Chiang Mai.
Eureka King was a US-based startup that served journalist organizations (Associated Press, KQED) and the public with web-based marketing tools and analytics dashboards. I designed and built front-end components with Ruby on Rails, Cake/PHP, React.js, and Node.js.
My less technical responsibilities included hiring and managing a team of three full-time developers, coordinating interns, and various startup duties.
Technical Co-Founder. Toronto.
HBE was a Canadian startup that designed iPhone applications. As a co-founder, I designed various components of an iPhone application and helped get the seed round funding.
Sole Proprietor. Toronto.
Dmitri’s Animation was a contracting business I started that produced video content and provided web services. I was paid through this busienss name by Henning Solutions and other clients, like Sheridan College who hired me to produce short animation videos for their stage producdtion. See the archived website.
`chat-bubble` UI
I’ve contributed to a number of projects on GitHub. Below is my most-used open-source project:
chat-bubble
Core maintainer.
chat-bubble
is a simple vanilla JavaScript framework for building chat front-ends on the web quickly and with minimal setup. It was made to simplify bot interactions and had numerous contributions, including RASA implementation. While this project has been dormant since 2021, it has zero dependencies and thus needs no chore updates.
Last day of teaching at Prince Royal’s College.
This is a short list of other jobs I’ve held, which may give you a fuller idea of my general life experience.
Visiting Advisor. Nyang Shwe.
I volunteered to teach the basics of business opportunities and responsibilities to new entrepreneurs in the village of Nyang Shwe (Myanmar).
Computer Science and Design Instructor. Chiang Mai.
I taught 800 Thai children (ages 12-24) how to build websites in Chiang Mai’s largest private school.
Research Assistant. Toronto.
I helped run and design psychology experiments on campus while studying for my degree.
Carpenter Assistnat. Toronto.
This was my part-time job while studying where I helped with demoliton, drywall installation, roofing, etc.
After the graduating ceremony at the University of Toronto.
Graduated with a Bachelor of Science degree with a double major in Psychology and Communication, Culture, and Information Technology.
Graduated with a certificate in Digital Communication.