Chris Suryadi
Rails development, advertising, and AI automation.
I'm a full stack developer and sysadmin in Jakarta, and Digital Marketing Manager at Massindo Group, a group of mattress brands. I build and maintain 10 production apps written in Ruby, PHP, JavaScript, Java and Node.js, and I run Meta Ads for 8 brands with Python automation.
- production apps
- 10
- years with Rails
- 4+
- brands managed
- 8
Production projects
Links go to the live sites. The ones without a link are internal or under NDA.
-
iSleep by Comforta
E-commerce + CMS for Indonesia's premium sleep brand. Multi-brand catalogue, product configurator, admin panel, SEO-optimized.
Rails 8 · PostgreSQL · Redis · Elasticsearch
-
Massindo Group
Corporate website for a mattress manufacturer. Multi-brand showcase, press room, career portal.
Rails 7 · PostgreSQL · Shrine
-
Comforta
Brand website for Comforta mattresses. Product catalogue, dealer locator, integrated promotions.
Rails 7 · PostgreSQL · Importmap
-
Spring Air
US-licensed mattress brand website. Product lines, store finder, digital campaign landing pages.
Rails 7 · PostgreSQL · Tailwind
-
Sleep Spa
Premium sleep brand website. Product showcase, booking system, ambassador programme.
Rails 7 · PostgreSQL · Hotwire
-
Therapedic
US-licensed medical-grade mattress brand. Product catalogue, healthcare positioning, dealer network.
Rails 7 · PostgreSQL
-
Pure Foam
Mattress brand site with dealer locator, promo engine, and lightweight product catalogue.
Rails 7 · PostgreSQL · Tailwind
-
Sleep Center
Multi-brand retail platform. Advanced filtering, real-time inventory, campaign management.
Rails 8 · PostgreSQL · Turbo · Elasticsearch
internal / NDA
-
Alta Integra
Building physics consultancy site. Custom WP theme, REST API bridge, bilingual CMS.
WordPress · React · PHP · MySQL
internal / NDA
-
DrRest
Brand website for DrRest sleep systems. Page copy, images, FAQ and the experts page are edited from the admin panel.
Rails 8.1 · PostgreSQL · Tailwind · Hotwire
Skills
I look after the code, the servers and the databases. Virtual machines and containers run on GCP, Oracle VM, Proxmox, KVM and Docker, some of them as microservices. On PostgreSQL and MySQL that means schema design, backups and query tuning; on the servers, SSH hardening, firewall rules and Nginx.
What this site runs on
-
nginx
Serves
public/and the precompiled assets, hands everything else to Passenger.config/nginx/portfolio.conf -
Passenger
Runs the Rails app inside nginx.
Capfile -
Rails 8.1 + Propshaft
Pages, admin, Atom feed and sitemap. No JavaScript build step.
Gemfile -
SQLite
Projects, services and posts, in one database file.
config/database.yml
Capistrano 3.20
Builds each release on Ruby 3.3.8 through rbenv and keeps the last five.
config/deploy.rb
- Languages
- Ruby, PHP, JavaScript, Java, Python, Node.js, SQL, Bash / Shell
- Backend
- Ruby on Rails 7/8, REST API, Laravel, Express.js, Hotwire / Turbo, WordPress, Rails testing, Rails encrypted credentials
- Database
- PostgreSQL, MySQL, SQLite, Redis, Elasticsearch, DB Backup & Replication, Query Optimization, Schema Design
- Sysadmin & virtualization
- Linux (Ubuntu/Debian), Nginx, SSH Hardening, UFW / Firewall, Proxmox / KVM, VMware, Oracle VM, LXC Containers, Cron / Monitoring
- Cloud & DevOps
- GCP (Google Cloud), Docker, Microservices, Capistrano, Passenger / Puma, SSL / Let's Encrypt, Git / GitLab, CI/CD Pipelines
- Marketing tech
- Meta Ads API, Facebook & Instagram Ads, Campaign Automation, Google Sheets API, Python scripting, Meta Marketing API monitoring, GA4 & GTM configuration, Technical SEO
- Automation & data
- Data reconciliation (Python, SQLite), Scheduled jobs & health checks
Where the newer entries come from
- Rails testing, encrypted credentials
- An event invitation app for a mattress brand. Its test suite grew with each release, and its secrets live in Rails encrypted credentials.
- Google Sheets API
- The same app reads the guest list from the organizers' Google Sheet and writes RSVP and attendance status back. Running the sync twice changes nothing.
- Data reconciliation
- Python and SQLite checks that compare two pipelines fed by the same spreadsheet and account for every row that differs.
- Scheduled jobs & health checks
- Morning cron and launchd jobs that write a finish marker, plus a separate check that reports any job that failed or never finished.
- Meta Marketing API
- A nightly job copies ad data from the Marketing API into SQLite. A morning check reads it and flags spend the campaign plan does not cover.
- GA4 & GTM
- Key events and GTM tags set up for brand websites.
- Technical SEO
- Sitemap, robots.txt, canonical URLs and JSON-LD on a retail site's staging build, and on this site.
Writing
-
Why the QR tickets wouldn't scan: an SVG with no viewBox
Event tickets drawn as inline SVG QR codes failed to scan because the SVG had a fixed width and height but no viewBox, so CSS resized its box without scaling the drawing and cut off a corner pattern. A viewBox and a four-module white margin fixed it.
Contact
I take remote freelance and contract work on Rails projects, DevOps setups and Meta Ads. Payment is in USD via Wise, hourly or per project.
- css.lim08@gmail.com
- in/css95
- GitHub
- css08
- GitLab
- css.lim08
- Contra
- Profile on Contra
Services and rates
-
Full Stack Development
Rails, PHP, Java, Node.js, from MVP to production. API, admin, e-commerce.
$75/hr
-
VPS / Cloud Setup
GCP, Nginx, Docker, SSL, Capistrano. Production-ready infra from scratch.
$299/project
-
Database Administration
PostgreSQL, MySQL schema design, backup strategy, query optimization.
$149/project
-
Docker & Microservices
Containerize apps, microservice architecture, GCP / Oracle VM deployment.
$299/project
-
Server Security Hardening
SSH hardening, firewall, fail2ban, audit report. Clear deliverables.
$199/project
-
Meta Ads Management
Campaign setup, A/B testing, weekly optimization, monthly report.
$299/mo