# Blog

> The Martian Chronicles — Evil Martians blog.

- URL: https://evilmartians.com/chronicles

- [Choose your fighter: benchmarking 5 WebSocket servers for Node.js](https://evilmartians.com/chronicles/choose-your-fighter-benchmarking-5-websocket-servers-for-nodejs.md): Evil Martians benchmarked five WebSocket servers for Node.js: Socket.io, uWebSockets.js, and AnyCable (OSS and Pro). How we caught our own load generator lying, and how to make WebSocket benchmark numbers honest.
- [Building a design system specced for engineers and agents](https://evilmartians.com/chronicles/building-a-design-system-specced-for-engineers-and-agents.md): Coding without design guidelines can leave teams with an inconsistent UI design and a complex feature development process. Here's how we built a design system for Currents that's readable by engineers and AI agents.
- [2 Martians, greenfield to MVP in 4 weeks: agentic coding on Rails](https://evilmartians.com/chronicles/2-martians-greenfield-to-mvp-in-4-weeks-agentic-coding-on-rails.md): A designer and an engineer shipped a production MVP in four weeks on Rails + Inertia. In this post, we share our agentic coding stack, the skills we built, and why it clicked.
- [Stop writing rules in AGENTS.md: use agent hooks and nano-staged instead](https://evilmartians.com/chronicles/stop-writing-rules-in-agents-md-use-agent-hooks-and-nano-staged-instead.md): Move LLM safeguards out of AGENTS.md: how agent hooks plus nano-staged run linters on changed files only, cut tokens, and tighten the agent's feedback loop
- [AI-assisted engineers are burning out, is this fine?](https://evilmartians.com/chronicles/ai-assisted-engineers-are-burning-out-is-this-fine.md): AI-assisted code generation is not free. It comes with a hidden cost: burnout. Are we dangerously ignorant to this problem? And how can we cope with it? In this post, we discuss this question.
- [600+ million people write right-to-left: 2 fixes your app needs](https://evilmartians.com/chronicles/600-million-people-write-right-to-left-2-fixes-your-app-needs.md): Arabic, Hebrew, and other right-to-left script users often can't type properly in apps that never considered them. The fix is usually two HTML attributes. Here's exactly what to add, and when.
- [From React to native web with nanotags: a migration that saved 100 KB](https://evilmartians.com/chronicles/from-react-to-native-web-with-nanotags-a-migration-that-saved-100kb.md): Most marketing sites ship a SPA framework just to toggle a sidebar. Here's how we migrated an Astro site from React and Ark UI to native Web Components: 100 KB less JavaScript, no functionality lost, and a tiny library called nanotags that makes Custom Elements enjoyable to write.
- [From 0 signal to 128 cold signups: product validation on a $2K budget](https://evilmartians.com/chronicles/from-0-signal-to-128-cold-signups-product-validation-on-2k-budget.md): A story of validating product demand on a $2K budget with 128 cold-traffic signups, an A/B winner at 95% confidence, and a sequenced playbook founders can run themselves.
- [3 rules for getting AI agents to find, use—and not exploit—your devtool](https://evilmartians.com/chronicles/3-rules-for-getting-ai-agents-to-find-use-and-not-exploit-your-devtool.md): The agent-led growth playbook: how to make AI agents discover, use, and pay for your developer tool, and defend against the ones you didn't invite. LLM discoverability, agent-first onboarding, agent payments, AX security.
- [Making your site visible to LLMs: 6 techniques that work, 8 that don't](https://evilmartians.com/chronicles/how-to-make-your-website-visible-to-llms.md): Most AI SEO advice is unproven. We tested what ChatGPT, Claude, and Perplexity actually read on our own site. Six LLM visibility techniques that worked, eight that didn't, and the metrics to tell the difference.
- [Now you see it: Vite on Rails without the proxy](https://evilmartians.com/chronicles/now-you-see-it-vite-on-rails-without-the-proxy.md): Introducing rails_vite—a new Vite integration for Rails that works with Propshaft, not against it. Drop it into an existing jsbundling app for instant CSS HMR, or use the full gem for manifest-based asset resolution.
- [Gemfile of dreams: the libraries we use to build Rails apps](https://evilmartians.com/chronicles/gemfile-of-dreams-libraries-we-use-to-build-rails-apps.md): We unveil the gemfile toolbox of the Martian Rails engineer; a universe of Evil Martian gems that encapsulate our philosophy and soul.
- [Migrating an event pipeline from NATS to Kafka with zero downtime](https://evilmartians.com/chronicles/migrating-an-event-pipeline-from-NATS-to-Kafka.md): Evil Martians migrated Wallarm's core event pipeline from NATS to Kafka in two months with zero downtime. Learn how we also handle event deduplication and reconstruct business flows for better understanding of the application.
- [TestProf Digest 2026.4: surprising finds from 30k specs](https://evilmartians.com/chronicles/test-prof-digest-2026-surprising-finds-from-30k-specs.md): Learn what's new in the world of slow tests and how TestProf continues to help Rails teams to keep CI build times under control.
- [We analyzed 1,140 devtools funding rounds—here's who's writing checks and why](https://evilmartians.com/chronicles/we-analyzed-1140-devtools-funding-rounds.md): We analyzed 1,140 early-stage funding rounds in developer tools, cybersecurity, and infrastructure from January 2025 through March 2026. Here are the top VCs and investors writing checks, the metrics that got companies funded, and the exact person to email based on what you're building.
- [OpenAPI + NestJS: type-safe controllers from the contract](https://evilmartians.com/chronicles/openapi-nestjs-type-safe-controllers-from-the-contract.md): NestJS is code-first by default meaning decorators describe your API, and the spec is generated from code. But decorators don't enforce anything at compile time. This post shows how to flip the flow to generate controller method types from an OpenAPI spec and let TypeScript catch contract drift before reaching production.
- [Tutorialkit.rb: interactive Ruby tutorials entirely in the browser](https://evilmartians.com/chronicles/tutorialkit-rb-interactive-ruby-tutorials-entirely-in-the-browser.md): The final report for Ruby Association Grant on TutorialKit.rb—a toolkit for building interactive Ruby and Rails tutorials that run entirely in the browser using WebAssembly and WebContainers. Featuring a full-featured installer, agent-friendly development workflow, deployment pipelines, HTTP support, and real-world examples.
- [Product-market fit methodology for early-stage devtool companies](https://evilmartians.com/chronicles/product-market-fit-methodology-devtools.md): How do you measure product-market fit for a developer tool? A PMF scoring model from Evil Martians—a product development consultancy for developer tools startups—built on data from 37 devtools companies across AI, infrastructure, and cybersecurity. Five metrics, real benchmarks, and a dual score that tells you whether to invest in product or go-to-market.
- [Web slides are web apps: live interactivity for Reveal.js and Slidev](https://evilmartians.com/chronicles/web-slides-are-web-apps-live-interactivity-for-revealjs-and-slidev.md): Nothing could make me switch from Keynote to web-based slides. Then, I did! And as a WebSocket geek, I realized it opens up new opportunities! Here's my contribution to making your web presentations beautifully interactive.
- [Why devtools startups hire Evil Martians](https://evilmartians.com/chronicles/why-devtools-startups-hire-evil-martians.md): Evil Martians is a developer tools consultancy. Founded in 2006, we work with about 40 early-stage startups a year, mostly seed to Series B. We helped bolt.new scale from zero to $40M+ ARR in 5 months. Teleport and Tines reached unicorn status with Martians on their teams.
- [OpenAPI + Fastify: let the contract build your server](https://evilmartians.com/chronicles/openapi-fastify-backend-let-the-contract-build-your-server.md): Wire your OpenAPI contract into a Node.js Fastify backend with auto-generated routes, typed handlers, and request validation—no manual route definitions, no type drift, no integration surprises.
- [The Flipper gem is amazing, here's how we extended it the Martian way](https://evilmartians.com/chronicles/flipper-gem-is-amazing-we-extended-it-the-martian-way.md): A deep dive extending Flipper in Rails: friendly actor IDs, team-wide flags, percentage rollouts, analytics events, and admin auditing.
- [Solving the Nebraska problem with the Open Source Endowment](https://evilmartians.com/chronicles/solving-the-nebraska-problem-with-the-open-source-endowment.md): Konstantin Vinogradov, an open source and infra VC investor, and his co-founders are building the first permanent funding model for critical open source infrastructure. We dive into why OSE stands a chance at battling the Nebraska problem, and how Evil Martians contributed as a pro-bono donor.
- [Life's too short to hand-write API types: OpenAPI-driven React](https://evilmartians.com/chronicles/lifes-too-short-to-hand-write-api-types-openapi-driven-react.md): Transform your React development with contract-first APIs. Generate TypeScript types, build type-safe clients, and develop with mocks while backend implements—no more waiting, no more integration chaos.
- [Ruby on Whales: Dockerizing Ruby and Rails development](https://evilmartians.com/chronicles/ruby-on-whales-docker-for-ruby-rails-development.md): An exhaustive and documented Docker configuration for developing Ruby and Rails applications
- [Writing custom RuboCop rules in 2026](https://evilmartians.com/chronicles/writing-custom-rubocop-rules-in-2026.md): Write and ship modern custom RuboCop cops in 2026: learn the new plugin system, requires_gem API, InternalAffairs best practices, safe autocorrection nuances, and design trade-offs for building robust, future-proof lint rules.
- [PostCSS creator shares how to make your open source popular](https://evilmartians.com/chronicles/how-to-make-your-open-source-popular.md): With 20+ years and millions of downloads, PostCSS creator Andrey Sitnik shares his guide on how to make your open source project popular.
- [The 4 most common security risks when vibe coding your app](https://evilmartians.com/chronicles/four-most-common-security-risks-when-vibe-coding-your-app.md): Vibe coding can speed up app development, but it can also quietly introduce serious security flaws. Here are the four most common risks and how to avoid them.
- [Tutorialkit.rb: the ruby.wasm journey goes onward](https://evilmartians.com/chronicles/tutorialkit-rb-the-ruby-wasm-journey-goes-onward.md): An intermediate report for Ruby Association Grant on TutorialKit.rb, a toolkit for building interactive Ruby and Rails tutorials that run entirely in the browser using WebAssembly and WebContainers.
- [Super speed, super quality: lessons from the Aptos Network site launch](https://evilmartians.com/chronicles/super-speed-super-quality-lessons-from-the-aptos-network-site-launch.md): Evil Martians make the impossible possible: launching a new Aptos Network website in just one month!
- [So, your developers use AI now—here's what to know](https://evilmartians.com/chronicles/so-your-developers-use-ai-now-here-is-what-to-know.md): Research-backed insights into what AI-assisted developers can actually deliver: when productivity improves, when it doesn’t, and how setting realistic expectations means best quality results.
- [Building dev tools with AI: the product decisions that need to be yours](https://evilmartians.com/chronicles/building-dev-tools-with-ai-the-product-decisions-that-need-to-be-yours.md): AI can generate a full dashboard in an afternoon. But speed doesn't eliminate design decisions—and building the wrong thing faster is an expensive mistake. Here's what design work looks like across four stages, from framing problems to learning after launch.
- [Optimistic UI in Rails with optimism... and Inertia](https://evilmartians.com/chronicles/optimistic-ui-in-rails-with-optimism-and-inertia.md): Build optimistic UI in Rails with Inertia by updating props before requests complete. Learn the replaceProp pattern, automatic reconciliation, rollback behavior, and history caveats using a kanban board example.
- [How to Favicon in 2026: Three files that fit most needs](https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs.md): Prefer SVG over PNG, trust browsers to downscale, drop obscure formats—the ultimate, exhaustive guide to favicons for modern web. Includes steps for static HTML and Webpack.
- [How to detect Safari and iOS versions with ease in 2026](https://evilmartians.com/chronicles/how-to-detect-safari-and-ios-versions-with-ease.md): Read how to accurately detect Safari and iOS versions using WebKit feature checks, behavioral tests, and selective UA hints to gate features safely and avoid breaking UX.
- [What devtools founders making $100M+ ARR told me in San Francisco](https://evilmartians.com/chronicles/what-devtools-founders-making-100m-arr-told-in-san-francisco.md): I spent the year in San Francisco, having face-to-face conversations with founders you already follow. Here are the top pieces of advice to take into 2026.
- [6 things developer tools must have in 2026 to earn trust and adoption](https://evilmartians.com/chronicles/six-things-developer-tools-must-have-to-earn-trust-and-adoption.md): Developers don’t need more tools—they need fewer, higher-quality ones. This piece distills research and field evidence into six principles for faster, calmer, trustworthy devtools in 2026.
- [Inertia.js in Rails: a new era of effortless integration](https://evilmartians.com/chronicles/inertiajs-in-rails-a-new-era-of-effortless-integration.md): We want to make Inertia.js more popular within the Rails community, so we've started a project to provide both Rails-specific community docs and a set of tools for simply integrating Inertia into Rails apps.
- [AnyCable, Rails, and the pitfalls of LLM-streaming](https://evilmartians.com/chronicles/anycable-rails-and-the-pitfalls-of-llm-streaming.md): Real-time LLM streaming sounds simple—until it isn’t. A Rails-focused look at hidden pitfalls, AnyCable’s fixes, and the future of durable streams.
- [Why your vibe-coded project needs a developer](https://evilmartians.com/chronicles/why-your-vibe-coded-project-needs-a-developer.md): After seeing dozens of vibe-coded projects up close, it's clear the gap between a prototype and product ready for users is wider than most expect. Eventually, progress becomes impossible without an experienced developer. We explore why that is, and I share a real-world case study to illustrate.
- [Why Evil Martians hosted a Ruby conference in San Francisco](https://evilmartians.com/chronicles/why-evil-martians-hosted-a-ruby-conference-in-san-francisco.md): Here's why we scaled up our San Francisco Ruby meetups to SF Ruby Conf with 400+ Ruby engineers for three days of technical talks and startup demos.
- [Vibe coding in style.md](https://evilmartians.com/chronicles/vibe-coding-in-style-dot-md.md): We've experimented putting the essence of a Martian engineer into AGENTS.md. Learn the story, then try it on your next AI-assisted project!
- [Unparser: real life lessons migrating Ruby tools from Parser to Prism](https://evilmartians.com/chronicles/unparser-real-file-lessons-migrating-ruby-tools-from-parser-to-prism.md): A deep dive into Ruby parsing and unparsing, the transition from the Parser gem to Prism for Ruby 3.4 support, and how tooling adapts to evolving AST formats using Unparser as a case study.
- [Vibecoding tools can learn from design UX and win over everyone](https://evilmartians.com/chronicles/vibecoding-tools-can-learn-from-design-ux-and-win-over-everyone.md): Tools like Bolt, Dazl, and Lovable are leading the charge with AI coding tools. But there are design patterns that can improve vibecoding workflows even more, reducing friction, and elevating AI tool UX into intuitive, creator-friendly experiences that appeal to users on a massive scale.
- [Payment form best coding practices that don't drop sales](https://evilmartians.com/chronicles/payment-form-best-coding-practices-that-dont-drop-sales.md): Learn how to optimize payment forms with frontend techniques to reduce abandonment and increase conversion rates. From performance optimization to UX design, discover actionable strategies that can boost conversion by up to 35%.
- [Why startups choose React (and when you shouldn't)](https://evilmartians.com/chronicles/why-startups-choose-react-and-when-you-should-not.md): React dominates with 88.6% of startup funding, but 85% of these projects are dead. We analyze funding patterns, GitHub activity, and ecosystem health across React, Vue, Angular, and Svelte.
- [Migrating Whop from PostgreSQL to PlanetScale MySQL with 0 downtime](https://evilmartians.com/chronicles/migrating-whop-from-postgresql-to-planetscale-zero-downtime.md): How we helped Whop migrate their high-traffic Rails app from PostgreSQL to PlanetScale MySQL without downtime or development pauses. Read about dual-database setups, schema quirks, and the lessons learned.
- [Why we're excited about the SF Ruby conference](https://evilmartians.com/chronicles/why-we-are-excited-about-sf-ruby-conference.md): SF Ruby and Evil Martians are excited to invite you to our premier event: the San Francisco Ruby Conference.
- [Debug AI fast with this open source library to visualize agent traces](https://evilmartians.com/chronicles/debug-ai-fast-agent-prism-open-source-library-visualize-agent-traces.md): Debugging AI agents shouldn’t mean digging through endless JSON. AgentPrism, an open-source React component library by Evil Martians, turns raw OpenTelemetry traces into clear visualizations, instantly revealing loops, errors, and cost spikes. Built with Quotient AI, AgentPrism helps teams ship reliable, production-grade AI systems up to 5x faster.
- [How to add fast, client-side search to Astro static sites](https://evilmartians.com/chronicles/how-to-add-fast-client-side-search-to-astro-static-sites.md): Join me on a breathtaking journey as we add a client-side search to an SSG docs-first site, built with Astro!
- [Martian Summer: blog, talks, open source, and ready for SFRuby in Nov](https://evilmartians.com/chronicles/martian-summer-blogs-talks-open-source-ready-for-sfruby-nov.md): Open source, talks around the world and prepping SFRuby for Nov 2025. Catch up Evil Martians' blog, open source, podcast, and get ready as we head for SFRuby Conference in San Francisco.
- [Contract shock therapy: the way to API-first documentation bliss](https://evilmartians.com/chronicles/contract-shock-therapy-the-way-to-api-first-documentation-bliss.md): Learn how to build a dedicated API documentation repository that becomes your team's single source of truth, enabling true contract-first development.
- [Flaky tests, be gone: long-lasting relief for chronic CI retry irritation!](https://evilmartians.com/chronicles/flaky-tests-be-gone-long-lasting-relief-chronic-ci-retry-irritation.md): Flaky tests got you down? The Evil Martians formula stops chronic CI retry irritation! Clinically proven on ClickFunnels' massive test suite and dozens of developers!
- [OKLCH in CSS: why we moved from RGB and HSL](https://evilmartians.com/chronicles/oklch-in-css-why-quit-rgb-hsl.md): CSS Color Module 4 adds oklch(), and we gain P3 wide-gamut support, boost code readability, and improve developer-designer communication.
- [Baking with Rails at scale: recipes in Ruby, cookware from Go, C, and Rust](https://evilmartians.com/chronicles/baking-with-rails-at-scale-recipes-in-ruby-cookware-from-go-c-rust.md): Scale your Rails app without rewrites. Learn to keep business logic in Ruby and delegate heavy work to specialized tools, built with Go, C, and Rust, for performance and scalability.
- [Exploring Active Agent, or can we build AI features the Rails way?](https://evilmartians.com/chronicles/exploring-active-agent-or-can-we-build-ai-features-the-rails-way.md): Explore how the Active Agent library brings Rails conventions to AI development, with real-world examples from Evil Martians' early adoption experience
- [The Whop chop: how we cut a Rails test suite and CI time in half](https://evilmartians.com/chronicles/the-whop-chop-how-we-cut-a-rails-test-suite-and-ci-time-in-half.md): Evil Martians cut Whop’s Rails test suite and CI time in half using profiling, factory optimizations, and parallelization. Learn how we speed up tests and boost reliability.
- [The scenic route: lessons building an IntelliJ IDEA plugin for Luau](https://evilmartians.com/chronicles/the-scenic-route-lessons-building-intellij-idea-language-support.md): This post covers the complex (but rewarding) process of building native language support for JetBrains from scratch. From crafting lexers and parsers to wrestling with soft keywords, PSI trees, and error recovery, this guide walks through the real stuff.
- [The Long Game: why Rails survived the hype cycle and what it means for your startup](https://evilmartians.com/chronicles/the-long-game-why-rails-survived-the-hype-cycle-and-what-it-means-for-your-startup.md): Rails isn’t dead, it’s thriving. Learn how Ruby on Rails survived the hype cycle, why startups like Chime and Figma still bet on it, and what it means for your next project.
- [Circuit breakers and Ruby in 2025: don't break your launch](https://evilmartians.com/chronicles/circuit-breakers-and-ruby-in-2025-dont-break-your-launch.md): Take a deep dive into what circuit breakers are, why you might need them, and the options you have in Ruby.
- [Redprints CFP: an open source CFP management app built with Rails + Inertia.js](https://evilmartians.com/chronicles/redprints-cfp-open-source-cfp-management-app-build-with-rails-and-inertia-js.md): Introducing Redprints CFP, an open source CFP management application built for the SF Ruby Conference with Rails and Inertia.js.
- [What we learned from creating PostCSS](https://evilmartians.com/chronicles/what-we-learned-from-creating-postcss.md): We share what have we learned creating PostCSS and the huge ecosystem around it. Get 8 key lessons from Andrey Sitnik, creator of PostCSS.
- [AnyCable for Laravel: reliable WebSocket infrastructure](https://evilmartians.com/chronicles/anycable-for-laravel.md): 
- [Simplicity, vanished?! Solving the mystery with Inertia.js + Rails](https://evilmartians.com/chronicles/simplicity-vanished-solving-the-mystery-with-inertia-js-and-rails.md): Has simplicity gone missing in web development? This investigative piece uncovers how Inertia.js + Rails defy JavaScript bloat and reclaim developer sanity.
- [API contracts and everything I wish I knew: a frontend survival guide](https://evilmartians.com/chronicles/api-contracts-and-everything-i-wish-i-knew-a-frontend-survival-guide.md): A letter from the future about the 3-week endpoint waits, 2 AM staging environment debugging sessions, and why contract-first development changes everything. The hard-won wisdom of API development that nobody tells you until it's too late.
- [We studied 100 dev tool landing pages—here’s what really works in 2025](https://evilmartians.com/chronicles/we-studied-100-devtool-landing-pages-here-is-what-actually-works-in-2025.md): While designing a landing page template for dev tool startups, we reviewed 100+ real product sites. Along the way, we uncovered practical insights—here’s what’s worth knowing if you’re building one yourself.
- [The early validation lesson: designing Quotient’s prompt sandbox](https://evilmartians.com/chronicles/the-early-validation-lesson-designing-quotient-prompt-sandbox.md): The awesome Quotient team, a vision from the future, and a brilliant pivot. But if you're a visionary working on next-gen tech, you need to learn from the road we travelled on the way there!
- [The Hotwire-Rails summit, or interactive multi-step forms at peak UX](https://evilmartians.com/chronicles/hotwire-rails-summit-interactive-multi-step-forms-peak-ux.md): Read about the techniques and tools we used to build a slick-looking interactive multi-step form with Rails and Hotwire for one of our clients.
- [How to make an AI clone of your CEO for the world's biggest hackathon](https://evilmartians.com/chronicles/how-to-make-an-ai-clone-of-your-ceo-worlds-biggest-hackathon-tavus-bolt-new.md): Evil Martians and Bolt.new teamed up to build an AI clone of their CEO Eric Simons using Tavus to power real-time video calls for the world’s largest hackathon.
- [Weeks → days: a case for expert-led, AI-driven design engineering](https://evilmartians.com/chronicles/weeks-to-days-a-case-for-expert-led-ai-driven-design-engineering.md): While working on a project highlighting a decade of investments in AI products, I recorded how often I used LLMs. Once done, I reread my notes and was shocked—my tech knowledge, multiplied by AI, helped compress weeks of work into a few days.
- [A Tea Break: building sfruby.com with Bolt.new](https://evilmartians.com/chronicles/a-tea-break-building-sfruby-com-with-bolt-new.md): How we used Bolt.new and AI to launch sfruby.com in days, building a cool and high-converting site for SF Ruby Conf with Astro, OKLCH, and some Martian flair.
- [How AI startups use changelogs to win developer trust](https://evilmartians.com/chronicles/how-ai-startups-use-changelogs-to-win-developer-trust.md): The AI era demands speed—and smarter changelogs! Whether you're building agents or full-stack AI, use changelogs to get people interested and invested in your progress, build in public, and tell your story.
- [Exploring the OKLCH ecosystem and its tools](https://evilmartians.com/chronicles/exploring-the-oklch-ecosystem-and-its-tools.md): Explore a powerful set of tools built around the OKLCH color model—Harmonizer for accessible palettes, Polychrom for Figma contrast checking, apcach for color contrast calculations, and more. Perfect for frontend developers and designers building consistent, modern UIs.
- [How Recraft's lean team is challenging the AI image generation giants](https://evilmartians.com/chronicles/how-recraft-lean-team-is-challenging-ai-image-generation-giants.md): Conventional thinking says only tech giants with massive resources can compete in AI image generation. But startup Recraft is proving this wrong, carving out big market share with a small team and strategic thinking.
- [Demo app design for Medplum, open source healthcare developer platform](https://evilmartians.com/chronicles/demo-app-design-medplum-open-source-healthcare-developer-platform.md): What began as a request to add templating capabilities to a demo app evolved into something much more valuable: a reimagining of Medplum's product strategy.
- [GMI Cloud meets Webflow and speeds ahead in the AI compute race](https://evilmartians.com/chronicles/gmi-cloud-meets-webflow-and-speeds-ahead-in-the-ai-compute-race.md): Evil Martians partnered with GMI Cloud to design and launch a high-performance, Webflow-powered website in just 3.5 weeks—blending fast execution, cutting-edge 3D visuals, and analytics-ready conversion flows to help this $82M-funded AI startup win the GPU compute race.
- [Rails, hacking, and Stripe as a scoreboard: Marc Köhlbrugge’s playbook](https://evilmartians.com/chronicles/rails-hacking-and-stripe-as-a-scoreboard-marc-kohlbrugge-playbook.md): Marc Köhlbrugge on hacking, building startups, shipping early, why Rails powers his experiments—and his wish for the Ruby ecosystem.
- [UI for Quotient AI: the developer tool for prompt engineers](https://evilmartians.com/chronicles/ui-for-quotient-ai-the-developer-tool-for-prompt-engineers.md): We designed a playground for prompt engineers—and this is how we helped Quotient AI build this developer-first interface for evaluating LLMs. We implemented a complete and structured platform built from scratch, with a clear user flow and intuitive experience.
- [Making desktop apps with revved-up potential: Rust + Tauri + sidecar](https://evilmartians.com/chronicles/making-desktop-apps-with-revved-up-potential-rust-tauri-sidecar.md): Real experience using the Tauri framework to build a desktop app with a sidecar running in the background; this may be a program written in any language and can be used to surpass the framework possibilities of Tauri!
- [Let there be docs! Generating an OpenAPI schema across the Rails stack](https://evilmartians.com/chronicles/let-there-be-docs-generating-openapi-schema-across-rails-stack.md): When can an implementation-first approach to documentation be preferred over documentation-first? Find the answer, and see how to do it with an existing application by leveraging some tools in some unexpected ways (including Martian ones!) Plus, AI-assisted migration tips.
- [Attention: An Important Brand Update From The Evil Martians Blog](https://evilmartians.com/chronicles/attention-an-important-brand-update-from-the-evil-martians-blog.md): Has the quest for a definitive visual identity for the Evil Martians blog finally ended?
- [Hey developer tool teams, don’t copy these copywriting clichés!](https://evilmartians.com/chronicles/hey-developer-tool-teams-dont-copy-these-copywriting-cliches.md): Avoid common dev tool copywriting problems. Learn to spot errors, improve clarity, market better, and come up with messages that stick.
- [Simple Declarative Presence for Hotwire apps with AnyCable](https://evilmartians.com/chronicles/simple-declarative-presence-for-hotwire-apps-with-anycable.md): Learn how to seamlessly integrate online presence tracking into a Rails application powered by Hotwire and AnyCable.
- [How to kill conversions on your developer tool's landing page](https://evilmartians.com/chronicles/how-to-kill-conversions-on-your-developer-tool-landing-page.md): Over the years, we've identified several excellent ways to kill landing page conversions. If you're interested in repeating (or learning from) our mistakes, we've decided to share!
- [How to make web videos way smaller in 2025 using the AV1 codec](https://evilmartians.com/chronicles/better-web-video-with-av1-codec.md): Learn to use AV1 to make videos on your website smaller and better quality. CLI instructions and cross-browser tricks.
- [How Doximity brought real-time Go power to their Rails app](https://evilmartians.com/chronicles/growing-pains-and-a-dose-of-go-real-time-features-for-this-rails-app.md): We helped Doximity, an online platform for medical professionals get maximum productivity for user calls. That involved keeping their investment in Rails but adding the real-time performance benefits of Go.
- [Hire better, 10X faster: how we screen 50 engineers weekly with no HR](https://evilmartians.com/chronicles/hire-better-10x-faster-how-we-screen-50-engineers-weekly-with-no-hr.md): Evil Martians have built a system that finds exceptional engineers while cutting costs and respecting everyone’s time. Read and learn how!
- [Ruby on Rails on WebAssembly: a guide to full-stack in‑browser action](https://evilmartians.com/chronicles/ruby-on-rails-on-webassembly-a-guide-to-full-stack-in-browser-action.md): Learn how to run a fully functional Ruby on Rails blog in your browser using WebAssembly—no servers needed; a complete guide to making Rails Wasm-ready.
- [3 smart ways to highlight features for landing pages or launch weeks](https://evilmartians.com/chronicles/three-smart-ways-to-highlight-features-for-landing-pages-or-launch-weeks.md): Explore three expert (and underutilized) methods to showcase features on landing pages or during launch weeks, enhance engagement, and boost conversions!
- [Martian Kubernetes Kit: running apps—and running them well](https://evilmartians.com/chronicles/martian-kubernetes-kit-running-apps-and-running-them-well.md): In this article, we’ll talk about the process of deploying and managing a real-world application on a Kubernetes cluster using the Martian Kubernetes Kit
- [Devs in mind 2025: how to design interfaces for developer tools](https://evilmartians.com/chronicles/devs-in-mind-how-to-design-interfaces-for-developer-tools.md): What interface design differences exist between commercial software and, creative, developer tools for pros? Let's analyze and find out how to better design tools!
- [The 16 most active developer tool investors and VCs going into 2025](https://evilmartians.com/chronicles/top-16-developer-tool-investors-and-vcs-going-into-2025.md): Building a developer-facing product and eyeing a fundraise in 2025? Here are the current active investors and VCs. We analyze the top 16, who might be the best fit for your product, and how to effectively make connections with them.
- [Railsmas on Mars: 12 Days of Mandatory Developer Joy and Challenge](https://evilmartians.com/chronicles/railsmas-on-mars-12-days-of-mandatory-developer-joy-and-challenge.md): Over 12 days, we’ll unwrap 12 small (but mighty) approaches designed to level up your Rails apps. We’ll discuss, then suggest hands-on practice!
- [Don't just slap on a chatbot: building AI that works before you ask](https://evilmartians.com/chronicles/dont-just-slap-on-a-chatbot-building-ai-that-works-before-you-ask.md): Too many are racing to integrate AI the same way: bolting on a chat and calling it a day. We partner with founders to go beyond these conventional implementations. In this post, principles and lessons about a better approach to integrate proactive AI.
- [Ease and epiphany: 4 ways to stop misguided dev tools user onboarding](https://evilmartians.com/chronicles/easy-and-epiphany-4-ways-to-stop-misguided-dev-tools-users-onboarding.md): Dev tool users don’t need the typical onboarding process, period. Let’s share fundamentals and tips on how we help users reach ultimate productivity ASAP!
- [Keeping Rails cool: the modern frontend toolkit](https://evilmartians.com/chronicles/keeping-rails-cool-the-modern-frontend-toolkit.md): We advocate and build for Rails startups, and we know this tech gives teams a productivity and competitive edge. But we also know what startups struggle with the most: frontend. Let's share our silver toolkit for dealing with it!
- [bolt.new from StackBlitz: how they surfed the AI wave—with no wipeouts](https://evilmartians.com/chronicles/bolt-new-from-stackblitz-how-they-surfed-the-ai-wave-with-no-wipeouts.md): We helped StackBlitz scale to 3M+ developers and build bolt.new, going from 0 to $4M ARR in 4 weeks. Read on and let's help your dev tool surf the AI wave.
- [Founders, if you want A+ startup success, do the homework first!](https://evilmartians.com/chronicles/founders-if-you-want-a-plus-startup-success-do-the-homework-first.md): We've worked with dozens of early-stage startups and seen how rushed product development can blur founder focus, blow up budgets, and lead to frustration. So, before jumping in—do your homework!
- [Hey, AnyCable speaking! Needing help with a Twilio-OpenAI connection?](https://evilmartians.com/chronicles/anycable-speaking-needing-help-with-a-twilio-openai-connection.md): Learn how to use AnyCable to integrate a voice assistant to your project with Twilio Media Streams and OpenAI Realtime API
- [How to do launch weeks for developer tools, startups, and small teams](https://evilmartians.com/chronicles/how-to-do-launch-weeks-for-developer-tools-startups-and-small-teams.md): A launch week is densely packed with content and activities designed to announce and explain new releases and features from different angles. They are a tested promotional strategy for early stage startups (and especially for developer tools with small teams!)
- [Woah, opacity! A full guide to this badass hero of efficient UI design](https://evilmartians.com/chronicles/woah-opacity-a-full-guide-to-this-badass-hero-of-efficient-ui-design.md): See how opacity can be a game changer for web apps, minimizing the number of design tokens, styles, and component variants, thus making your workflow more efficient and flexible, especially useful for startups and fast-moving teams.
- [11 HTML best practices for login & sign-up forms](https://evilmartians.com/chronicles/html-best-practices-for-login-and-signup-forms.md): Even popular sites fail to implement the 11 best practices mentioned in this article, and thus have at least one mistake. Use this checklist on your next pull request review that deals with any form.
- [A taste of Go code generator magic: a quick guide to getting started](https://evilmartians.com/chronicles/a-taste-of-go-code-generator-magic-a-quick-guide-to-getting-started.md): Make a small program that generates wrapping functions for the given type methods, and use this example as a good starting point for your own Go code generator!
- [Designing Tegon: a signature vision for the AI-driven issue tracker](https://evilmartians.com/chronicles/designing-tegon-a-signature-vision-for-the-ai-driven-issue-tracker.md): Tegon, the open source, AI-first issue tracker for engineering teams, needed a UI and UX to distinguish it from other issue trackers. Evil Martians took charge of this transformation, redesigning the core experience and bringing new ideas for AI-first features to elevate the issue tracker UX.
- [Creating a winning sales flow with authentic writing from engineers](https://evilmartians.com/chronicles/creating-a-winning-sales-flow-with-authentic-writing-from-engineers.md): Authentic content from engineers can promote your startup's product or service. Here's how to motivate them and set up a winning flow for your team.
- [A letter to founders: join the local-first movement!](https://evilmartians.com/chronicles/a-letter-to-founders-join-the-local-first-movement.md): Local-first is the next big thing, and in fact, it’s already disrupting the market of professional tools with one killer feature: zero latency. Read on to find out what that means, if it makes sense for your product and market, and how to ride this wave!
- [How to quickly (and weightlessly) convert Chrome extensions to Safari](https://evilmartians.com/chronicles/how-to-quickly-and-weightlessly-convert-chrome-extensions-to-safari.md): Created a browser extension for Chrome and now want it available in Safari too? Learn how and get guidelines on the extra steps needed for App Store publication.
- [Dev tools AI‑fication 101: lessons from Martian robots](https://evilmartians.com/chronicles/dev-tools-ai-fication-101-lessons-from-martian-robots.md): Learn how to bring AI to your developer tool by following our TestProf AI case study.
- [Railing against time: tools and techniques that got us 5X faster tests](https://evilmartians.com/chronicles/railing-against-time-tools-and-techniques-that-got-us-5x-faster-results.md): Read about the tools, techniques, mindset that got our client 5X faster tests.
- [TestProf III: guided and automated Ruby test profiling](https://evilmartians.com/chronicles/test-prof-3-guided-and-automated-ruby-test-profiling.md): TestProf is back with new features and tips for hunting slow Ruby tests and improving the developer experience by reducing feedback loop times.
- [TestProf II: Factory therapy for your Ruby tests](https://evilmartians.com/chronicles/testprof-2-factory-therapy-for-your-ruby-tests-rspec-minitest.md): Learn how to bring your Ruby test suite back to full health, and full speed, with TestProf—a powerful bag of tools to diagnose all test-related problems. Chapter II: Factories.
- [TestProf: a good doctor for slow Ruby tests](https://evilmartians.com/chronicles/testprof-a-good-doctor-for-slow-ruby-tests.md): This article introduces the Ruby test profiling toolbox called TestProf.
- [The SDK Imperative: why developer tools live or die by their SDKs](https://evilmartians.com/chronicles/the-sdk-imperative-why-developer-tools-live-or-die-by-their-sdks.md): Developer tools need an end-to-end developer experience, including the SDK. If that's slow, it undermines the performance benefits of the core product.
- [Want to make a great developer tool UI? Follow this fundamental rule!](https://evilmartians.com/chronicles/devtool-layout-rule.md): This fundamental UI design principle can make your interface simple to use and understand: elements on the top should control elements on the bottom, and elements on the left should control elements on the right. Learn deeper nuances about this rule—and make sure your users perceive your UI as logical and intuitive!
- [git push --force and how to deal with it](https://evilmartians.com/chronicles/git-push---force-and-how-to-deal-with-it.md): What to do if you have accidentally force pushed to the wrong git branch: a step by step tutorial.
- [Engineering connections: a conference talk primer for humans](https://evilmartians.com/chronicles/engineering-connections-a-conference-talk-primer-for-humans.md): Evil Martians keep finding their way onstage, delivering great talks and even a few awesome keynotes. Here's some of our tips for preparing your own talk.
- [Flying free: a tale of partitioning with canaries in PostgreSQL](https://evilmartians.com/chronicles/flying-free-a-tale-of-partitioning-with-canaries-in-postgresql.md): This canary-based partitioning strategy is a safer, more controlled way to handle large-scale database partitioning and query optimization. Get real-time statistics and gradual optimization, reducing the risks with traditional partitioning processes.
- [How to make complex Chrome extensions: a zero gravity guide](https://evilmartians.com/chronicles/how-to-make-complex-chrome-plugins-a-zero-gravity-guide.md): Building a complex browser extension isn't exactly easy, so use this guide and float to success!
- [Startups on Rails in 2024: my keynote at RailsConf](https://evilmartians.com/chronicles/startups-on-rails-in-2024-my-keynote-at-railsconf.md): Are startups choosing Ruby and Rails in 2024? Yes, they are! Moreover, they're shipping products faster by switching to Rails from the hyped Next.js and the established Java. Hear these stories in Irina's keynote at RailsConf.
- [Connection avalanche safety tips and prepping for real-time applications](https://evilmartians.com/chronicles/connection-avalanche-safety-tips-and-prepping-for-realtime-applications.md): Learn about different strategies for taming a specific case of the thundering herd problem in real-time applications—connection avalanches.
- [Recapping the first Local‑First conference in 15 minutes](https://evilmartians.com/chronicles/recapping-the-first-local-first-conference-in-15-minutes.md): A recap of the talks and key insights from the first Local-First Conference 2024
- [Realtime diagnostic logging, or how to really spy on your Go web apps](https://evilmartians.com/chronicles/realtime-diagnostic-logging-or-how-to-really-spy-on-your-go-web-apps.md): Learn how to temporarily stream verbose logs from your Go application without restarts and even without changing the application-level logging settings.
- [Beyond monospace: the search for the perfect coding font](https://evilmartians.com/chronicles/beyond-monospace-the-search-for-the-perfect-coding-font.md): A guide for both font designers and users on the design differences that matter for programming and code readability.
- [The art of Turbo Mount: Hotwire meets modern JS frameworks](https://evilmartians.com/chronicles/the-art-of-turbo-mount-hotwire-meets-modern-js-frameworks.md): Explore the fusion of Hotwire simplicity and JavaScript interactivity using the integration of Turbo Mount and React, Vue, or Svelte components for a dynamic and responsive user experience.
- [The lion's den: NestJS and authentication with AWS Cognito](https://evilmartians.com/chronicles/the-lions-den-nest-js-and-authentication-with-aws-cognito.md): Read how we complete the full stack circle and integrate AWS Cognito authentication with NestJS.
- [How does your chatbot UX size up? The 5 laws of ChatRobotics](https://evilmartians.com/chronicles/how-does-your-chatbot-ux-size-up-the-5-laws-of-chatrobotics.md): The quality of a chatbot's UX determines success. Take these 5 UX principles to heart during development.
- [Keep it together: 5 essential design patterns for dev tool UIs](https://evilmartians.com/chronicles/keep-it-together-5-essential-design-patterns-for-dev-tool-uis.md): UI design can often make or break a successful developer tool. This post covers 5 essential dev tool UI patterns in a way so that even non-designers can get their project off the ground.
- [Let's have more tech meetups! A quick-start guide to holding your own](https://evilmartians.com/chronicles/lets-have-more-tech-meetups-a-quick-start-guide-to-holding-your-own.md): Technical meetups are truly the best way to connect to people with similar passions. So, let’s bring them back! Here’s our quickstart guide based on our successful experience organzing a tech meetup in the San Francisco Bay Area.
- [Next-level docs with Next.js: Teleport’s new customer acquisition channel](https://evilmartians.com/chronicles/next-level-docs-with-nextjs-teleports-new-customer-aquisition-channel.md): Well-structured, detailed documentation matters for all open source projects, but for Open Core solutions adopted by large businesses—it’s absolutely critical. See how we helped Teleport not only redesign their docs, but gain a super user acquisition channel in the process.
- [How to manifest streamlined authentication: AWS Cognito in a React app](https://evilmartians.com/chronicles/how-to-manifest-streamlined-authentication-aws-cognito-in-a-react-app.md): Streamline the authentication process and essentially alleviate the burden of managing it by integrating AWS Cognito and AWS Amplify into your React TypeScript application, with a focus on SAML 2.0 integration with Identity Providers and enhancing REST API security using Bearer token authentication.
- [CLI UX best practices: 3 patterns for improving progress displays](https://evilmartians.com/chronicles/cli-ux-best-practices-3-patterns-for-improving-progress-displays.md): 3 popular UI patterns for keeping users informed about ongoing processes: the spinner, the X of Y pattern, and the progress bar, the pros and cons of each, and tips for choosing the one that best suits your needs.
- [Let there be docs! A documentation-first approach to Rails API development](https://evilmartians.com/chronicles/let-there-be-docs-a-documentation-first-approach-to-rails-api-development.md): We examine approaches to API documentation, with a case for why the documentation-first approach is beneficial, plus, we'll not only introduce a new Ruby gem, Skooma, that will be a revelation for those who are ready to follow this path, you can also read on for practical tips and advice for jumping in.
- [MVPs, prototypes, results: how to win with a Martian Design Sprint](https://evilmartians.com/chronicles/mvps-prototypes-results-how-to-win-with-a-martian-design-sprint.md): Our clients have seen big wins from our design sprints: rapid MVPs, design artifacts that set the project course, new investment funds, successful business pivots, and even design awards. This is the ideal way to kickstart the entire development process, bring founder ideas to life, and give Evil Martians a test drive.
- [Kamal: hot deployment tool to watch—or a total game changer?](https://evilmartians.com/chronicles/mrsk-hot-deployment-tool-or-total-game-changer.md): The SRE pros at Evil Martians attempt an objective analysis of the promises, applications, and potential of Kamal (formerly known as MRSK), plus things to watch out for.
- [Beyond bars and lines: 7 cool ways to visualize data in your dev tool](https://evilmartians.com/chronicles/beyond-bars-and-lines-7-cool-ways-to-visualize-data-in-your-dev-tool.md): There are many different ways that developer tools can visualize data, and some may not be so obvious. We examine 7 methods of displaying data, the pros and cons of each, real life cases, and we also share even more scenarios where you might leverage each type of graph.
- [Why should developers write? 3 reasons and 3 common blocks](https://evilmartians.com/chronicles/why-should-developers-write-3-reasons-and-3-common-blocks.md): Why should developers write? In this post, we share three reasons why, plus three common roadblocks and how to overcome them.
- [Martian Kubernetes Kit: unboxing our toolkit's technical secrets](https://evilmartians.com/chronicles/martian-kubernetes-kit-unboxing-our-toolkits-technical-secrets.md): We’ve been shipping Kubernetes to clients since 2015, and over the years, we realized it would be nice to have a setup that referred to some core distribution for our Kubernetes configuration. Read about our efforts creating a toolkit for our clients that make adopting it easy and affordable, transforming it from potential headache into just another comfortable tool in the toolbox for those clients who decide to use it with us.
- [How to make complex serverless file processing a piece of cake](https://evilmartians.com/chronicles/how-to-make-serverless-file-processing-a-piece-of-cake.md): Complex file processing can be easy with serverless solutions, but to perform manipulations on the uploaded files, you also need an easy-to-integrate system. Learn file processing tools and techniques with a real case and see an example serverless app for Google Cloud Platform.
- [The complete guide to multi-tenant SaaS, part 1: collaboration](https://evilmartians.com/chronicles/the-complete-guide-to-multi-tenant-saas-part-1-collaboration.md): An experience-backed overview on adding a multiplayer/multi-tenant SaaS mode to an existing product with a focus on collaboration: conflict resolution, history management, and offline modes.
- [“Fair” multi-tenant prioritization of Sidekiq jobs—and our gem for it!](https://evilmartians.com/chronicles/fair-multi-tenant-prioritization-of-sidekiq-jobs-and-our-gem-for-it.md): How can we manage the priorities of different users without compromising user experience in a multi-tenant app? We share our solution—plus, our new Ruby gem for implementing it!
- [First steps with ruby.wasm: or how we built Ruby Next Playground](https://evilmartians.com/chronicles/first-steps-with-ruby-wasm-or-building-ruby-next-playground.md): Learn how to package your Ruby application into a WebAssembly module and run it right in a web browser. Get Ruby Next without leaving your browser and share your experiments with others simply by sending a link.
- [Hiring a product designer: 1 hard skill and 3 soft skills to look for](https://evilmartians.com/chronicles/hiring-a-product-designer-1-hard-skill-and-3-soft-skills-to-look-for.md): It’s a challenge for founders to find product designer who is both a good fit for an early-stage startup and who has the potential to become a future head of product. This is tough because early-stage companies require a unique set of skills from candidates, but this guide will show you the way.
- [Value pricing for Dev Tools: a strategy beneficial for both sides](https://evilmartians.com/chronicles/value-pricing-for-dev-tools-a-strategy-beneficial-for-both-sides.md): We dig into pricing models with a focus on value pricing, a strategy where the price of a product is derived from the value the product creates for the customer.
- [ViewComponent in the Wild III: TailwindCSS classes & HTML attributes](https://evilmartians.com/chronicles/viewcomponent-in-the-wild-embracing-tailwindcss-classes-and-html-attributes.md): Learn how to manage TailwindCSS classes and HTML attributes in view components via the APIs provided by the view_component-contrib gem.
- [5 cool (and surprising) ways to configure Lefthook for automation joy](https://evilmartians.com/chronicles/5-cool-and-surprising-ways-to-configure-lefthook-for-automation-joy.md): At first, Lefthook was just a wrapper for calling custom scripts on Git hooks, but it has evolved into a tool that provides a clean and flexible way to automate your development routine, both in obvious and quite surprising ways. Read and see real project examples.
- [How to cultivate capital: 6 tips from developer tools founders and VCs](https://evilmartians.com/chronicles/how-to-cultivate-capital-6-tips-from-developer-tools-founders-and-vcs.md): A quick guide on the crossroads of bootstrapping and fundraising with experience-backed tips that provides a roadmap to successful fundraising for developer tool founders.
- [UX research for dev tools must not be neglected: our quick-start guide](https://evilmartians.com/chronicles/ux-research-for-dev-tools-must-not-be-neglected-our-quick-start-guide.md): When making developer-facing tools, good UX research is essential for a solid product. In this post, we present practical strategies and ways of overcoming common developer tool UX research obstacles.
- [Martian Kubernetes Kit: a smooth-sailing toolkit from our SRE team](https://evilmartians.com/chronicles/martian-kubernetes-kit-a-smooth-sailing-toolkit-from-our-sre-team.md): We’ve been shipping Kubernetes to clients since 2015, and over the years, we realized it would be nice to have a setup that referred to some core distribution for our Kubernetes configuration. Read about our efforts creating a toolkit for our clients that make adopting it easy and affordable, transforming it from potential headache into just another comfortable tool in the toolbox for those clients who decide to use it with us.
- [Figma plugin magic tricks: mixing colors with SVG and Canvas API](https://evilmartians.com/chronicles/figma-plugin-magic-tricks-mixing-colors-with-svg-and-canvas-api.md): During development, sometimes the obvious solution doesn’t work. In those cases, you need some problem solving magic tricks. That's exactly how we used SVG and the Canvas API to successfully recreate color blending mechanics for our UI-text readability Figma plugin, Polychrom.
- [Pen, paper, IDE: a DevTool Founder’s early-stage product design guide](https://evilmartians.com/chronicles/pen-paper-ide-a-devtool-founders-early-stage-design-guide.md): If you’re a technical founder: a CTO, technical CEO, VP of Engineering, or any type of engineer, and now the UI is in your court, this post is for you. We’ll discuss ways to save money and create an MVP without a designer.
- [Care beyond code: 7 best design practices for frontend developers](https://evilmartians.com/chronicles/care-beyond-code-7-best-design-practices-for-frontend-developers.md): Frontend can be about more than just code—we’re also the last bastion helping our teams against pesky design bugs! We share 7 best design practices for frontend engineers.
- [Extremely open and incredibly close: should you go open source?](https://evilmartians.com/chronicles/extremely-open-and-incredibly-close-should-you-go-open-source.md): Every founder building for developers must inevitably consider if the product should be open sourced. And if so, how to approach this from the financial perspective? We share a detailed list of open source business strategies.
- [Freezolite: the magic gem for keeping Ruby literals safely frozen](https://evilmartians.com/chronicles/freezolite-the-magic-gem-for-keeping-ruby-literals-safely-frozen.md): Introducing the freezolite gem, which helps enable frozen string literals by default in Ruby projects on a per-folder basis.
- [Figma plugin API: diving into advanced algorithms & data structures](https://evilmartians.com/chronicles/figma-plugin-api-dive-into-advanced-algorithms-and-data-structures.md): When developing a Figma plugin, one may encounter issues not covered by the official documentation. For example, making Polychrom, a supercharged UI-text readability plugin, needed innovative solutions, like applying algorithms and tree traversal techniques. This is the kind of post you read to think “outside the docs”.
- [DIY PaaS: serverless real-time with one command](https://evilmartians.com/chronicles/diy-paas-serverless-real-time-with-one-command.md): Choose a scalable and maintainable real-time solution today to stay happy and productive tomorrow. Consider an open source service you can run on a modern cloud with one command as an alternative to expensive PaaS.
- [Midjourney vs. human illustrators II: more Martians join the battle!](https://evilmartians.com/chronicles/midjourney-vs-human-illustrators-ii-more-martians-join-the-battle.md): Witness an emerging field, and how a team of professionals is experimenting in that field (while maintaining their humanity and eye for quality as much as possible). Plus, practical starting steps for the uninitiated!
- [Better dynamic themes in Tailwind with OKLCH color magic](https://evilmartians.com/chronicles/better-dynamic-themes-in-tailwind-with-oklch-color-magic.md): We make Tailwind CSS play nice with CSS variables, OKLCH colors, and dynamic themes. Get reliable, predictable theming.
- [The future of full-stack Rails II: Turbo View Transitions](https://evilmartians.com/chronicles/the-future-of-full-stack-rails-turbo-view-transitions.md): Learn how to enhance your Turbo applications’ UX with View Transitions
- [The future of full-stack Rails: Turbo Morph Drive](https://evilmartians.com/chronicles/the-future-of-full-stack-rails-turbo-morph-drive.md): Learn why and how to use DOM morphing with Hotwire Turbo to improve the UX of your full-stack Rails applications.
- [5 best practices for preventing chaos in Tailwind CSS](https://evilmartians.com/chronicles/5-best-practices-for-preventing-chaos-in-tailwind-css.md): Tailwind CSS has become a very popular CSS framework, and it can speed up development. But using it without proper caution can add mayhem to your code. Learn best practices to avoid getting swept away!
- [It’s dangerous to go alone: take our guide to the “IDEAL” HTTP client!](https://evilmartians.com/chronicles/its-dangerous-to-go-alone-take-our-guide-to-the-ideal-http-client.md): Essential techniques to ensure your HTTP clients are robust and configured to avoid pitfalls and insights on the benefits of separating the client code layer from the app. This guide isn't limited to backend apps (although most examples are in Ruby), the same principles work for any language and platform, even frontend.
- [It deserved its own tome: Layered Design and the Extended Rails Way](https://evilmartians.com/chronicles/it-deserved-its-own-tome-layered-design-and-the-extended-rails-way.md): We talk about Principal Backend Engineer Vladimir Dementyev’s new book on crafting ultra-maintainable Rails apps, “Layered Design for Ruby on Rails Applications”. We delve into the book, the Extended Rails Way, the future of Rails, his attempts to convince his nephew to try Rails, and more!
- [Successful balance: gracefully and tactfully raising a dev tool price](https://evilmartians.com/chronicles/successful-balance-gracefully-and-tactfully-raising-a-dev-tool-price.md): Sometimes, a shift in monetization strategies is necessary to keep a dev tool dream going. In this post, we outline when it's time to consider a shift, the steps to take beforehand, and a practical list for following through with a new pricing plan to ensure maximum product growth and customer satisfaction.
- [How to make next-level Figma plugins: auth, routing, storage, and more](https://evilmartians.com/chronicles/how-to-make-next-level-figma-plugins-auth-routing-storage-and-more.md): Playbook, a platform for creators to store, organize, and collaborate with creative content, needed a Figma plugin to create a smoother experience for designers. Learn how we built them a full-featured frontend application-style Figma plugin, with storage, auth, routing, and more. Plus, get tool recommendations and other tips!
- [Super GitHub Pages: budget frontend staging, with Storybook and more](https://evilmartians.com/chronicles/super-github-pages-budget-frontend-staging-with-storybook-and-more.md): Learn how to set up a staging environment for a small project on a budget. Use GitHub Pages to create a frontend staging branch to test, collaborate, and optimize. Whether you're working with Storybook or any other tool, this is a cost-effective solution.
- [imgproxy goes solo: unveiling a bold future for this new company](https://evilmartians.com/chronicles/imgproxy-goes-solo-unveiling-a-bold-future-for-this-new-company.md): imgproxy, the hyper-fast, secure image processing tool, has gone solo! In this post, the team shares future imgproxy plans and features.
- [Enter AnyCable v1.4: reliable real-time features for apps of any size](https://evilmartians.com/chronicles/enter-anycable-v1-4-reliable-real-time-features-for-apps-of-any-size.md): AnyCable 1.4 is here with major improvements like Reliable Streams, Resumable Sessions, simplified Heroku deployment, long-polling fallback, enhanced HotWire compatibility, and OCPP support. Realiable real-time features for apps of any size!
- [How a year-long LeetCode habit upped my professional game](https://evilmartians.com/chronicles/how-a-year-long-leetcode-habit-upped-my-professional-game.md): Are algorithmic tasks like those on LeetCode useful for a developer beyond live-coding interview tasks? After spending a year developing a LeetCode habit, Nina Torgunakova answers the question and gives tips.
- [“AI” marks the spot: a quick AI treasure map for businesses](https://evilmartians.com/chronicles/ai-marks-the-spot-a-quick-ai-treasure-map-for-businesses.md): AIs have been wowing everyone, but for businesses in particular, there's still even more lucrative AI exploration to do. We uncover lesser-known gems and inspiring success stories.
- [Before your next frontend pull request, use this checklist](https://evilmartians.com/chronicles/before-your-next-frontend-pull-request-use-this-checklist.md): Frontend pull requests often contain common mistakes. Avoid them with this list of 7 small (but crucial) rules.
- [How to turn an open source project into a profitable business](https://evilmartians.com/chronicles/how-to-turn-an-open-source-project-into-a-profitable-business.md): Success in the word of commercial open source remains an open question. To find your path, talk to your clients and understand their goals and pains; in this article, we look closer at the scene and ways forward.
- [From Ruby to Crystal? Writing and distributing a CLI tool](https://evilmartians.com/chronicles/from-ruby-to-crystal-writing-and-distributing-a-cli-tool.md): We use the Crystal language to build a CLI tool, a coverage reporter for Coveralls, as a static binary and as a Homebrew tap
- [Icon transcendence: customizing icons to complement fonts](https://evilmartians.com/chronicles/icon-transcendence-customizing-icons-to-complement-fonts.md): There are many lovely open source icon sets out there, but sometimes, we just need to 'transcend' them. Product Designer Gleb Stroganov shows us how to craft customized icons by leveraging product font styles, bridging two key interface elements—and giving our products some serious style.
- [Go integration testing with courage and coverage](https://evilmartians.com/chronicles/go-integration-testing-with-courage-and-coverage.md): We explore different strategies for test coverage calculation in Go, including the recently added support for coverage profiling in Go 1.20.
- [Don’t wait, let’s use the browser Contact Picker API now](https://evilmartians.com/chronicles/dont-wait-lets-use-browser-contact-picker-api-now.md): We’ll explain and demo the browser Contact Picker API. Contact Picker features have been ubiquitous in native mobile apps for a long time. Browser adoption has finally picked up enough and it’s time to implement these features there, too.
- [Ruby Bytes, or generating standalone generators](https://evilmartians.com/chronicles/ruby-bytes-or-generating-standalone-generators.md): Introducing Ruby Bytes, a toolkit to build, install and deploy Ruby and Rails application templates.
- [RuboCoping with legacy: Bring your Ruby code up to Standard](https://evilmartians.com/chronicles/rubocoping-with-legacy-bring-your-ruby-code-up-to-standard.md): How we introduce code style to mature Ruby/Rails projects with RuboCop and Standard.
- [AnyCable off Rails: connecting Twilio streams with Hanami](https://evilmartians.com/chronicles/anycable-goes-off-rails-connecting-twilio-streams-with-hanami.md): How to use AnyCable-Go as a library to control any WebSocket client from Ruby by example: analyzing Twilio Media streams with Hanami.
- [Cool frontend arts of local-first: storage, sync, conflicts](https://evilmartians.com/chronicles/cool-front-end-arts-of-local-first-storage-sync-and-conflicts.md): Web applications often require an internet connection, but a fair chunk can also work offline. We show frontend engineers how to gracefully implement the big 3 local-first solutions: storage, synchronization, and conflict resolutions.
- [“Design first, then build”: let’s bury this myth forevermore](https://evilmartians.com/chronicles/design-first-then-build-lets-bury-this-myth-forevermore.md): Waiting to build your mobile or web app after all the mockups and designs are complete is an increasingly obsolete model. Let’s present an alternative that we've used to great success.
- [Real-time magic, no elixirs: optimizing Sera with AnyCable](https://evilmartians.com/chronicles/real-time-magic-no-elixirs-optimizing-sera-with-anycable.md): We migrated a GPS tracker from Elixir to AnyCable and sped up the infrastructure based on AWS ECS, Fargate, and CloudFormation for Sera.
- [How to avoid tricky async state manager pitfalls in React](https://evilmartians.com/chronicles/how-to-avoid-tricky-async-state-manager-pitfalls-react.md): Learn how to prevent some tricky problems in React that can arise when using asynchronous state managers and avoid breaking UIs, animations, and destroying UX
- [OK, OKLCH: a color picker made to help think perceptively](https://evilmartians.com/chronicles/oklch-a-color-picker-made-to-help-think-perceptively.md): We designed the UI of the OKLCH Color Picker & Converter with education in mind as the driving design principle. Beyond being a handy tool, we aim to speed up familiarity and adoption of OKLCH and perceptual color spaces.
- [UI design for HTTPie: macOS vibes for the API testing client](https://evilmartians.com/chronicles/ui-design-for-httpie-macos-vibes-for-the-api-testing-client.md): We helped HTTPie, a popular open source dev tool, design an eye-catching and sleek UI that now works as a competitive differentiator.
- [How to build a better React map with Pigeon Maps and Mapbox](https://evilmartians.com/chronicles/how-to-build-a-better-react-map-with-pigeon-maps-and-mapbox.md): We needed a lightweight, essentially free solution for a customer map that would display our events in our React app. So we turned to Pigeon Maps and Mapbox, and here is how we made it.
- [Decentralized app design: first aid for common dApp UI pains](https://evilmartians.com/chronicles/decentralized-app-design-first-aid-common-dapp-ui-pains.md): For designers in Web3, crafting UIs for blockchain-based decentralized applications (dApps) present their own challenges—here’s how to solve them.
- [Midjourney vs. human illustrators: has AI already won?](https://evilmartians.com/chronicles/midjourney-vs-human-illustrators-has-ai-already-won.md): An experiment: we repeatedly give a typical work task to both a human artist and a text-to-image AI art generator. Who wins?
- [Blend to my will! Fonts on cylinder objects in Blender](https://evilmartians.com/chronicles/blend-to-my-will-fonts-on-cylinder-objects-in-blender.md): Making an illustration for a phone input UI: rendering the shape, curving text around it, and animating it.
- [Realtime text analysis with Word Tagger: recipe reader, part 2](https://evilmartians.com/chronicles/realtime-text-analysis-with-word-tagger-recipe-reader-part-2.md): In this article, iOS developers finish off a recipe reader. Getting text from images, analyze the findings, and convert them into usable class objects with the help of Word Tagger in Create ML.
- [One does not simply design: designers as product owners](https://evilmartians.com/chronicles/one-does-not-simply-design-designers-as-product-owners.md): Here's how Product Designers can stick to an MVP mindset, take ownership of the product, be involved, and just get things done.
- [Web Summit 2022: what you missed and how to be ready for next year](https://evilmartians.com/chronicles/web-summit-what-you-missed-how-to-be-ready-next-year.md): Evil Martians’ experience at Web Summit in Lisbon Portugal, presenting imgproxy, AnyCable, and more. Plus, tips for next year!
- [ViewComponent in the Wild II: supercharging your components](https://evilmartians.com/chronicles/viewcomponent-in-the-wild-supercharging-your-components.md): Learn how to supercharge your ViewComponent-based code with various techniques that we use in our projects at Evil Martians.
- [ViewComponent in the Wild I: building modern Rails frontends](https://evilmartians.com/chronicles/viewcomponent-in-the-wild-building-modern-rails-frontends.md): Learn why GitHub's ViewComponent library offers a great approach for building modern Ruby on Rails apps, and why you should give it a shot, too!
- [RubyKaigi 2022: a report from an Evil Martian in Japan](https://evilmartians.com/chronicles/rubykaigi-a-report-from-an-evil-martian-in-japan.md): For Evil Martians' Japanese office, the annual RubyKaigi conference was the perfect chance to meet up with the local Ruby community.
- [WebSocket Director: scenario-based integration tests for realtime apps](https://evilmartians.com/chronicles/websocket-director-scenario-based-integration-tests-for-real-time-apps.md): This post introduces WebSocket Director (wsdirector), a testing automation tool for WebSocket servers which uses human-readable scenarios stored in YAML or JSON files.
- [The journey from CircleCI to GitHub Actions](https://evilmartians.com/chronicles/journey-from-circleci-to-github-actions.md): Take Ruby on Rails and Node.js projects from CircleCI to GitHub Actions with almost no changes, learn the differences between the two, and more!
- [5 signs your project needs a design system](https://evilmartians.com/chronicles/5-signs-your-project-needs-a-design-system.md): Find out why your project would benefit from a shared set of practices and patterns between designers and frontend engineers.
- [Martians unveiled: infusing a new site with extraterrestrial tech and soul](https://evilmartians.com/chronicles/martians-unveiled-infusing-a-new-site-with-extraterrestrial-tech-and-soul.md): We've launched our new website after years of anticipation and a ton of collaboration! This article explains why and how, and reveals the tech behind it.
- [The sword is yours: transferring projects to another team unscathed](https://evilmartians.com/chronicles/the-sword-is-yours-transferring-projects-to-another-team-unscathed.md): A complete look at how we successfully hand off projects to another team.
- [Lefthook: refactoring the Git Hooks automation tool back into shape](https://evilmartians.com/chronicles/lefthook-refactoring-the-git-hooks-automation-tool-back-into-shape.md): Our refactoring process in action: our small Go app for automating Git Hooks actions becomes maintainable.
- [Taking off the Heroku training wheels: the Rails preflight checklist](https://evilmartians.com/chronicles/taking-off-the-heroku-training-wheels-the-rails-preflight-checklist.md): An opinionated guide for small teams on setting up Heroku to deploy Rails applications—with pleasure.
- [Phone inputs and you: the designer's essential UI guide](https://evilmartians.com/chronicles/phone-inputs-and-you-the-designers-essential-ui-guide.md): Phone inputs are everywhere on the web, but there are more UI and UX considerations implementing them than appear at first glance.
- [And they lived happily ever after… the M&A](https://evilmartians.com/chronicles/and-they-lived-happily-ever-after-the-m-and-a.md): Merger and acquisition advice to take before the deal so everyone will live happily ever after.
- [Smartly contracted: UI design and frontend for Certora](https://evilmartians.com/chronicles/smartly-contracted-ui-design-and-frontend-for-certora.md): Building a handy VS Code plugin for analyzing the verification results in the IDE for Certora.
- [Down the caching‑hole: adventures in 'HTTP caching and Faraday' land](https://evilmartians.com/chronicles/down-the-caching-hole-adventures-in-http-caching-and-faraday-land.md): Learn about HTTP caches, how Faraday middleware work, and how to use them to automagically start caching API calls.
- [The joy of Variable Fonts: getting started on the Frontend](https://evilmartians.com/chronicles/the-joy-of-variable-fonts-getting-started-on-the-frontend.md): Get set up with variable fonts on the frontend: properly load them, deal with settings, look at 'gotchas' and more!
- [Vite-lizing Rails: get live reload and hot replacement with Vite Ruby](https://evilmartians.com/chronicles/vite-lizing-rails-get-live-reload-and-hot-replacement-with-vite-ruby.md): How to use Vite.js to manage assets in Rails 7 applications with a hybrid or fully Dockerized development environment
- [Collaborative real-time security: Logux for Akeero](https://evilmartians.com/chronicles/collaborative-real-time-security-logux-for-akeero.md): Building a visual diagram composer with optimistic UI and real-time features based on Logux
- [How to make absolutely any app look like a macOS app](https://evilmartians.com/chronicles/how-to-make-absolutely-any-app-look-like-a-macos-app.md): This quick article explains a few key UI features to keep in mind if you want to mimic the feel and look of a macOS desktop app.
- [Building FEED: the tech behind the app](https://evilmartians.com/chronicles/building-feed-the-tech-behind-the-app.md): Martians built the FEED video iOS app from scratch: mobile development, backend, machine learning systems, and SRE
- [Figma DIY: Building a color system plugin](https://evilmartians.com/chronicles/figma-diy-building-a-color-system-plugin.md): Build a missing feature for Figma to create a flexible color system for your design project
- [How to use P3 colors with SVGs](https://evilmartians.com/chronicles/how-to-use-p3-colors-in-svg.md): How to make SVGs with P3 wide gamut colors for modern displays and fallbacks for old browsers and monitors
- [Soft deletion with PostgreSQL: but with logic on the database!](https://evilmartians.com/chronicles/soft-deletion-with-postgresql-but-with-logic-on-the-database.md): Rubyists might take special pleasure here, but every SQL and PostgreSQL dev can learn this unorthodox approach: putting soft delete logic on the database side.
- [eBaymag magic: under the hood of the international eBay spinoff](https://evilmartians.com/chronicles/ebaymag-magic-under-the-hood-of-ebay-product.md): Here's the story of how Evil Martians operated as the core tech team developing an eBay spin-off serving sellers in 120 countries
- [Realtime text analysis with Word Tagger: pro computer vision, part 1](https://evilmartians.com/chronicles/realtime-text-analysis-word-tagger-pro-computer-vision-part-1.md): In this article, iOS developers can check out how to grab text from images, analyze the findings, and convert them into usable class objects with the help of Word Tagger in Create ML.
- [A slice of life: table partitioning in PostgreSQL databases](https://evilmartians.com/chronicles/a-slice-of-life-table-partitioning-in-postgresql-databases.md): In this article, Ruby on Rails developers (and backend engineers in general) can learn to implement table partitioning in PostgreSQL databases and explore common problems and pitfalls.
- [Variable fonts in real life: how to use and love them](https://evilmartians.com/chronicles/variable-fonts-in-real-life-how-to-use-and-love-them.md): A look at variable fonts in real life. Everything’s here: practical examples, file optimization and accessibility benefits, and… the future!
- [Object Detection with Create ML: training and demo app](https://evilmartians.com/chronicles/object-detection-with-create-ml-training-and-demo-app.md): iOS devs learn object detection for Apple tech: Create ML, training, Full Network, and project integration.
- [Object Detection with Create ML: images and dataset](https://evilmartians.com/chronicles/object-detection-with-create-ml-images-and-dataset.md): iOS devs learn object detection for Apple tech: Create ML, Core ML, data collection, annotation, and dataset export
- [Our slice of the metaverse: 7 key AR features for iOS devs](https://evilmartians.com/chronicles/our-slice-of-the-metaverse-7-key-ar-features-for-ios-devs.md): Martian iOS Engineer Russ St Amant covers 7 key AR features every dev needs in their toolkit to make this modern-day magic possible!
- [AI and the auteur: using neural networks as artistic tools](https://evilmartians.com/chronicles/ai-and-the-auteur-using-neural-networks-as-artistic-tools.md): Follow the SunGaz AI art project from start to finish as machine learning, neutral networks, and human creativity create internationally-exhibited art.
- [Comms Pro: building a social video app for FEED](https://evilmartians.com/chronicles/comms-pro-building-a-social-video-app-for-feed.md): Martians built the FEED video iOS app from scratch: mobile development, backend, machine learning systems, and SRE
- [Kubing Rails: stressless Kubernetes deployments with Kuby](https://evilmartians.com/chronicles/kubing-rails-stressless-kubernetes-deployments-with-kuby.md): Exploring the Kuby framework for deploying Rails and AnyCable application to Kubernetes and introducing the kuby-anycable plugin
- [The Martian Design Sprint: starting and running projects faster](https://evilmartians.com/chronicles/the-martian-design-sprint-starting-and-running-projects-faster.md): Overview of the Martian Design Sprint, helping customers understand their project, goals, and get development started off on the right foot
- [TimescaleDB: integrating time-series data with Ruby on Rails](https://evilmartians.com/chronicles/time-series-data-using-timescaledb-with-ruby-on-rails.md): Overview of TimescaleDB highlights. Understanding time-series data. Integrating with Ruby on Rails. Implementing views counter demo
- [A no-go fantasy: writing Go in Ruby with Ruby Next](https://evilmartians.com/chronicles/a-no-go-fantasy-writing-go-in-ruby-with-ruby-next.md): Dive into both the Ruby and Go languages, learn to write Go in Ruby, and gain the ability to modify Ruby exactly as you desire
- [What could Go wrong with a mutex, or the Go profiling story](https://evilmartians.com/chronicles/what-could-go-wrong-with-a-mutex-or-the-go-profiling-story.md): Profiling Go stacktrace dumps and taking a deep look into how read-write mutexes work
- [Pro becomes smart: imgproxy Pro engages machine learning](https://evilmartians.com/chronicles/pro-becomes-smart-imgproxy-pro-engages-machine-learning.md): Welcome to imgproxy Pro 3.0, packed with object-oriented crop gravity, blurring and drawing detections, and auto-quality by SSIM
- [The tale of Sprockets and Webpacker duality](https://evilmartians.com/chronicles/the-tale-of-sprockets-and-webpacker-duality.md): How to migrate a large Rails application from Sprockets to Webpacker using a dual build strategy
- [Real-time stress: AnyCable, k6, WebSockets, and Yabeda](https://evilmartians.com/chronicles/real-time-stress-anycable-k6-websockets-and-yabeda.md): Introducing a k6 plugin to load test WebSockets and instrumenting the application under test with Yabeda, Prometheus and Grafana
- [SPA hexagon: Robust app architecture for mobile and web](https://evilmartians.com/chronicles/spa-hexagon-robust-app-architecture-for-mobile-and-web.md): See how to adapt a classic hexagonal architecture to single page applications with React Native and TypeScript
- [One row, many threads: How to avoid database duplicates in Rails applications](https://evilmartians.com/chronicles/one-row-many-threads-how-to-avoid-database-duplicates-in-rails-applications.md): A primer on avoiding duplicates in database tables that back your multi-threaded Rails applications with runnable examples
- [Decoding AVIF: Deep dive with cats and imgproxy](https://evilmartians.com/chronicles/decoding-avif-deep-dive-with-cats-and-imgproxy.md): It is time to talk seriously about AVIF, how it is different from predecessors, and how to start using it for web images today with the help of dead-simple and reliable self-hosted image converter from Evil Martians
- [Introducing JavaScript and TypeScript client for AnyCable](https://evilmartians.com/chronicles/introducing-anycable-javascript-and-typescript-client.md): Introducing AnyCable JS/TS SDK, a powerful and extensible library to communicate with Action Cable and AnyCable WebSocket servers
- [Accessible design from the get-go](https://evilmartians.com/chronicles/accessible-design-from-the-get-go.md): 20% of designer effort that can take care of 80% of a11y challenges
- [Designing Machine Learning for DVC Studio](https://evilmartians.com/chronicles/designing-machine-learning-for-dvc-studio.md): How we built a sophisticated, professional user interface for DVC Studio—a tool that helps Machine Learning engineers to run and track their experiments
- [Custom "cops" for RuboCop: an emergency service for your Ruby code](https://evilmartians.com/chronicles/custom-cops-for-rubocop-an-emergency-service-for-your-codebase.md): Learn to write custom rules for RuboCop, test them, and extract into a gem for reuse
- [AnyCable Goes Pro: Fast WebSockets for Ruby, at scale](https://evilmartians.com/chronicles/anycable-goes-pro-fast-websockets-for-ruby-at-scale.md): Introducing AnyCable Pro. The fast and robust drop-in extension for Action Cable aimed at Rails and pure Ruby projects adds commercial features on top of the open codebase
- [Premium design: Building a mobile app for Loewe](https://evilmartians.com/chronicles/premium-design-building-a-mobile-app-for-loewe.md): How to build an award-winning mobile app: for Loewe, we delivered UI design and developed a React Native application for iOS and Android, an API on the backend, and a back office interface
- [A broader picture: A guide on imgproxy for businesses](https://evilmartians.com/chronicles/a-broader-picture-a-guide-on-imgproxy-for-businesses.md): A detailed guide on cost-effective, on-the-fly image processing and image resizing with imgproxy, an OSS project with out-of-the-box features tailorable to your business.
- [Hotwire: Reactive Rails with no JavaScript?](https://evilmartians.com/chronicles/hotwire-reactive-rails-with-no-javascript.md): Take a deep dive into building reactive Rails applications with Hotwire Turbo and only a pinch of custom JavaScript. This article compliments the RailsConf 2021 talk by Vladimir Dementyev.
- [Set up Tailwind CSS JIT in a Rails project to compile styles 20x faster](https://evilmartians.com/chronicles/set-up-tailwind-css-jit-in-a-rails-project-to-compile-styles-20x-faster.md): How to switch to Tailwind CSS JIT when using Ruby on Rails and Webpacker.
- [Build images on GitHub Actions with Docker layer caching](https://evilmartians.com/chronicles/build-images-on-github-actions-with-docker-layer-caching.md): Cut your Docker build times by half by leveraging the power BuildKit and buildx on a GitHub Action runner. Enable Docker layer caching for your production builds and save time and money. See full YAML example for a production build of a Rails application.
- [Serverless TypeScript: A complete setup for AWS SAM Lambdas](https://evilmartians.com/chronicles/serverless-typescript-a-complete-setup-for-aws-sam-lambda.md): An ultimate serverless TypeScript workflow for Lambdas on AWS SAM that supports testing, debugging, and minimizing your Lambdas through partial compilation and shared layers
- [Logidze 1.0: Active Record, Postgres, Rails, and time travel](https://evilmartians.com/chronicles/logidze-1-0-active-record-postgresql-rails-and-time-travel.md): Learn about Logidze 1.0, a performant Ruby library that tracks Active Record changes using PostgreSQL triggers and JSONB stores.
- [Social background: Martians behind eBay Social's tech](https://evilmartians.com/chronicles/social-background-martians-behind-ebay-social-tech.md): Who's the core tech team for eBay Bonus cashback service, one of eBay's spin-offs? Discover what have Martians done in this project
- [Climbing Steep hills, or adopting Ruby 3 types with RBS](https://evilmartians.com/chronicles/climbing-steep-hills-or-adopting-ruby-types.md): A deep dive into adding Ruby Type Signatures to existing projects and using Steep to perform type checking.
- [Reusable development containers with Docker Compose and Dip](https://evilmartians.com/chronicles/reusable-development-containers-with-docker-compose-and-dip.md): Run and test your code in multiple environments with minimal effort while keeping Docker Compose files under control with Dip. Examples for Ruby, Node.js, and Erlang.
- [How to GraphQL with Ruby, Rails, Active Record, and no N+1](https://evilmartians.com/chronicles/how-to-graphql-with-ruby-rails-active-record-and-no-n-plus-one.md): An exhaustive hands-on guide for dealing with N+1 problem in database-backed Ruby or Rails applications that use Active Record and serve the GraphQL APIs
- [Big refactoring: Fix that app for Fund That Flip](https://evilmartians.com/chronicles/big-refactoring-fix-that-app-for-fund-that-flip.md): Helping the Fund That Flip lending platform in key features delivery and performance optimization to make the US finest house flipping
- [Squash N+1 queries early with n_plus_one_control test matchers for Ruby and Rails](https://evilmartians.com/chronicles/squash-n-plus-one-queries-early-with-n-plus-one-control-test-matchers-for-ruby-and-rails.md): Discover the performance testing alternative to detecting N+1 query problem in your Rails and pure Ruby applications
- [Finding growth: how to hack eBaymag with Growth Hacking](https://evilmartians.com/chronicles/finding-growth-how-to-hack-ebaymag-with-growth-hacking.md): A tutorial on Growth Hacking for engineers, based on a true story of eBaymag that brought the revenue boost with no dark patterns
- [Easy multi-language, multi-version documentation with Docsify, Git, and GitHub Actions](https://evilmartians.com/chronicles/easy-multi-language-multi-version-documentation-with-docsify-git-and-github-actions.md): How to maintain your growing documentation website and introduce multiple versions and languages with Docsify using nothing but Git and GitHub
- [PostCSS 8.0: Plugin migration guide](https://evilmartians.com/chronicles/postcss-8-plugin-migration.md): How to migrate your plugins to use the new API in PostCSS 8.0 for better performance and smaller node_modules
- [System of a test II: Robust Rails browser testing with SitePrism](https://evilmartians.com/chronicles/system-of-a-test-2-robust-rails-browser-testing-with-siteprism.md): Decouple your Capybara tests from HTML markup specifics with the help of SitePrism and a Page Object Model
- [Cloud Teleport: Building access plugins for Gravitational](https://evilmartians.com/chronicles/cloud-teleport-building-access-plugins-for-gravitational.md): A perfect match: Martians designed Slack, Jira, Mattermost, GitLab, PagerDuty integrations for approval workflows in Teleport OSS platform for engineers
- [Hands-on WebAssembly: Try the basics](https://evilmartians.com/chronicles/hands-on-webassembly-try-the-basics.md): Learn the basics of WebAssembly through code examples and try different ways to compile C and Rust programs for the browser with the help of Docker image from Evil Martians.
- [System of a test: Proper browser testing in Ruby on Rails](https://evilmartians.com/chronicles/system-of-a-test-setting-up-end-to-end-rails-testing.md): Discover the best practices for end-to-end browser testing in Ruby on Rails: Ferrum instead of Selenium, CDP, Docker
- [Apollo launch: Building a migration architecture for 2U](https://evilmartians.com/chronicles/apollo-launch-building-a-migration-architecture-for-2u.md): We designed the architecture to migrate 2U development to Apollo GraphQL Federation with zero downtime and fewer costs
- [AnyCable 1.0: Four years of real-time web with Ruby and Go](https://evilmartians.com/chronicles/anycable-1-0-four-years-of-real-time-web-with-ruby-and-go.md): Learn about AnyCable 1.0, a fast and robust drop-in extension for Action Cable, partly written in Go, for use in Rails and pure Ruby projects.
- [Power for Kadenze: More performance, less cloud costs](https://evilmartians.com/chronicles/power-for-kadenze-more-performance-less-cloud-costs.md): Need to scale due to a demand spike and cut cloud infrastructure costs at the same time? Get some insights from the Kadenze story.
- [Figma Auto Layout: Practical tips for dynamic designs](https://evilmartians.com/chronicles/figma-auto-layout-practical-tips-for-dynamic-designs.md): Learn Auto Layout tricks directly from Evil Martians designers to supercharge your Figma fu; grab youself some reusable components for free.
- [Desktop frontier: Video app optimization for Lowkey](https://evilmartians.com/chronicles/desktop-frontier-video-app-optimization-for-lowkey.md): Bridging web and Windows apps in esports: how we optimized the performance of Lowkey's Electron-based application
- [Keep up with the Tines: Rails frontend revamp](https://evilmartians.com/chronicles/keep-up-with-the-tines-a-rails-frontend-revamp.md): See how we breathed new life into a Ruby on Rails + jQuery + CoffeeScript frontend with React.js, Webpacker, TypeScript, MobX, and switching to GraphQL on the backend
- [Product design that sells: the smart UX for Tines](https://evilmartians.com/chronicles/product-design-that-sells-the-smart-ux-for-tines.md): A visually pleasing case study about smart UX design that helped attract valuable customers for Tines
- [Catch a batch: Making Mayhem 5 times more responsive](https://evilmartians.com/chronicles/catch-a-batch-making-mayhem-5-times-more-responsive.md): Achieving 5X faster server response: the lessons we learned during a 2-month project with Mayhem gaming startup
- [Ruby Next: Make all Rubies quack alike](https://evilmartians.com/chronicles/ruby-next-make-all-rubies-quack-alike.md): Introducing Ruby Next, a transpiler for Ruby.
- [Anyway Config: Keep your Ruby configuration sane](https://evilmartians.com/chronicles/anyway-config-keep-your-ruby-configuration-sane.md): Get your Ruby project out of ENV Hell with anyway_config: the framework for managing your application's configuration.
- [PostCSS 8.0 is coming: Here's what it brings](https://evilmartians.com/chronicles/postcss-8-is-coming-here-is-what-it-brings.md): Leaner node_modules, faster builds with the visitor API, dropping Babel for development, and more—thanks to your support
- [Beyond fashion: Deep Learning with Catalyst](https://evilmartians.com/chronicles/beyond-fashion-deep-learning-with-catalyst.md): Step-by-step tutorial for setting up a deep learning pipeline with Catalyst and deploying the model to production.
- [What I learned as a developer from accidents in space](https://evilmartians.com/chronicles/what-i-learned-as-a-developer-from-accidents-in-space.md): How Soviet space tales help the creator of PostCSS to follow best practices in development.
- [New home for Logux: Pouring love into an OSS documentation website](https://evilmartians.com/chronicles/new-home-for-logux-pouring-love-into-an-oss-documentation-website.md): How we built a 17 KB website with a perfect Lighthouse score while experimenting with UX and DX
- [Pulling the trigger: How to update counter caches in your Rails app without Active Record callbacks](https://evilmartians.com/chronicles/pulling-the-trigger-how-to-update-counter-caches-in-you-rails-app-without-active-record-callbacks.md): Keeping your counter caches in sync using nothing but database triggers
- [Persisted queries in GraphQL: Slim down Apollo requests to your Ruby application](https://evilmartians.com/chronicles/persisted-queries-in-graphql-slim-down-apollo-requests-to-your-ruby-application.md): How to set up persisted queries between a Ruby GraphQL application and an Apollo client
- [Images done right: Web graphics, good to the last byte](https://evilmartians.com/chronicles/images-done-right-web-graphics-good-to-the-last-byte-optimization-techniques.md): Start taking graphics on the web seriously and boost your applications' performance by learning the essentials about digital image formats.
- [GitHub Actions: First impressions](https://evilmartians.com/chronicles/github-actions-first-impressions.md): A taste of GitHub Actions for managing open source projects
- [Keeping OSS documentation in check with docsify, Lefthook, and friends](https://evilmartians.com/chronicles/keeping-oss-documentation-in-check-with-docsify-lefthook-and-friends.md): A tutorial for building a perfect CI setup for generating your open source documentation
- [Fullstaq Ruby: First impressions, and how to migrate your Docker/Kubernetes Ruby apps today](https://evilmartians.com/chronicles/fullstaq-ruby-first-impressions-and-how-to-migrate-your-docker-kubernetes-ruby-apps-today.md): Learn how to reduce your application memory consumption with new Ruby distribution.
- [Speeding up Go Modules for Docker and CI](https://evilmartians.com/chronicles/speeding-up-go-modules-for-docker-and-ci.md): Finally, the Golang world has a built-in, conventional dependency manager in the ecosystem: Go Modules. What began in Go 1.11 as an opt-in feature has become widely adopted by the community, and we are so close to Go 1.13 when Go Modules will be enabled by default. The delightful dilemma of choosing the “best” tool can be finally resolved.
- [Lefthook: knock your team’s code back into shape](https://evilmartians.com/chronicles/lefthook-knock-your-teams-code-back-into-shape.md): Meet Lefthook, the fastest polyglot Git hooks manager in our galaxy that requires zero setup from your contributors
- [Reporting non-nullable violations in graphql-ruby properly](https://evilmartians.com/chronicles/reporting-non-nullable-violations-in-graphql-ruby-properly.md): Learn how to report about certain flaws in your GraphQL API to your error tracker in the right way.
- [GraphQL on Rails: On the way to perfection](https://evilmartians.com/chronicles/graphql-on-rails-3-on-the-way-to-perfection.md): A hitchhiker’s guide to developing GraphQL applications with Rails and Apollo, part 3: cleaning up the code and setting up subscriptions
- [Lefthook, Crystalball, and git magic for smooth development experience](https://evilmartians.com/chronicles/lefthook-crystalball-and-git-magic.md): Learn how to make git hooks to do most routine tasks for you: install gems, migrate the database, run tests, and linters.
- [Asynchronous adventures: Aborting queries and mutations in react-apollo](https://evilmartians.com/chronicles/aborting-queries-and-mutations-in-react-apollo.md): How to cancel a mutation in Apollo with the help of AbortController.
- [Danger on Rails: make robots do some code review for you!](https://evilmartians.com/chronicles/danger-on-rails-make-robots-do-some-code-review-for-you.md): Automating code reviews with Danger.
- [Sorbetting a gem, or the story of the first adoption](https://evilmartians.com/chronicles/sorbetting-a-gem.md): The story of integrating Sorbet type checker into a Ruby gem development.
- [GraphQL on Rails: Updating the data](https://evilmartians.com/chronicles/graphql-on-rails-2-updating-the-data.md): A hitchhiker’s guide to developing GraphQL applications with Rails and Apollo, part 2: how to implement the authentication and use mutations to update the data
- [Normalization, consistency, and Clowne](https://evilmartians.com/chronicles/normalization-consistency-and-clowne.md): Dealing with database normalization problems in Ruby with the help of Clowne v1.0.
- [GraphQL on Rails: From zero to the first query](https://evilmartians.com/chronicles/graphql-on-rails-1-from-zero-to-the-first-query.md): A hitchhiker’s guide to developing GraphQL applications with Rails and React/Apollo. Part 1: how to make your first query to your own GraphQL server
- [A fixture-based approach to interface testing in Rails](https://evilmartians.com/chronicles/a-fixture-based-approach-to-interface-testing-in-rails.md): A fixture-based approach to interface testing in Rails.
- [Exposing permissions in GraphQL APIs with Action Policy](https://evilmartians.com/chronicles/exposing-permissions-in-graphql-apis-with-action-policy.md): Add authorization-related fields to GraphQL schema using Action Policy to tell clients which actions are allowed and not.
- [RubyKaigi 2019: A speaker’s report](https://evilmartians.com/chronicles/rubykaigi-2019-a-speakers-report.md): Andrey Novikov’s report on RubyKaigi 2019 from the speaker’s point of view
- [Rails 6: B-Sides and Rarities](https://evilmartians.com/chronicles/rails-6-b-sides-and-rarities.md): Discover lesser-known Rails 6 features that stay out of the spotlight but can bring a lot to your current applications.
- [Active Storage meets GraphQL pt. 2: exposing attachment URLs](https://evilmartians.com/chronicles/active-storage-meets-graphql-pt-2-exposing-attachment-urls.md): Serving files with Active Storage and GraphQL.
- [Storeon: "Redux" in 173 bytes](https://evilmartians.com/chronicles/storeon-redux-in-173-bytes.md): Meet a tiny state manager for frontend applications close in spirit to Redux that fits into 173 bytes.
- [Try Astrograph: Your GraphQL lens for Stellar blockchain](https://evilmartians.com/chronicles/try-astrograph-your-graphql-lens-for-stellar-blockchain.md): Blockchain meets GraphQL with the first release of a server for exploring Stellar network through a single endpoint.
- [Active Storage meets GraphQL: Direct Uploads](https://evilmartians.com/chronicles/active-storage-meets-graphql-direct-uploads.md): Integrating Active Storage direct uploads into GraphQL Ruby project
- [Faster WebGL/Three.js 3D graphics with OffscreenCanvas and Web Workers](https://evilmartians.com/chronicles/faster-webgl-three-js-3d-graphics-with-offscreencanvas-and-web-workers.md): Use the combination of OffscreenCanvas and Web Workers with my offscreen-canvas library to make your Three.js WebGL apps more performant even on low-end devices while keeping support for all browsers.
- [Cables vs. malloc_trim, or yet another Ruby memory usage benchmark](https://evilmartians.com/chronicles/cables-vs-malloc_trim-or-yet-another-ruby-memory-usage-benchmark.md): Benchmarking Action Cable memory usage.
- [Wrapping JSON-based ActiveRecord attributes with classes](https://evilmartians.com/chronicles/wrapping-json-based-active-record-attributes-with-classes.md): This post will teach you how to wrap JSON-based DB columns with ActiveModel-like classes easily.
- [Rails profiling story, or how I caught Faker trying to teach my app Australian Slang](https://evilmartians.com/chronicles/rails-profiling-story-or-how-i-caught-faker-trying-to-teach-my-app-australian-slang.md): Profile application boot time using test-prof, stackprof, and memory_profiler to measure the impact of loading tons of locales for Faker gem.
- [Carve your controllers like Papa Carlo](https://evilmartians.com/chronicles/rubanok-carve-your-rails-controllers-like-papa-carlo.md): Slimming down Rails controllers using the Rubanok gem.
- [Anonymous web authentication with Stellar blockchain](https://evilmartians.com/chronicles/anonymous-web-authentication-with-stellar-blockchain.md): Learn how to implement anonymous blockchain-based web authentication with Stellar, JavaScript and Node.js
- [CSS and JS are at war, here’s how to stop it](https://evilmartians.com/chronicles/css-and-js-are-at-war-heres-how-to-stop-it.md): There are a lot of people who love both JS and UX/CSS. If we stop labeling people just as "JS developers" or "UX developers", we can achieve a ceasefire in the current "JS vs. CSS" war and achieve a mutually benefiting peace.
- [Crafting user notifications in Rails with Active Delivery](https://evilmartians.com/chronicles/crafting-user-notifications-in-rails-with-active-delivery.md): Introducing active_delivery and abstract_notifier Ruby gems.
- [My Ruby 2018: Around the world in nine conferences](https://evilmartians.com/chronicles/my-ruby-2018-around-the-world-in-nine-conferences.md): How I traveled to, and talked at nine Ruby events around the world in one year.
- [Big on Heroku: Scaling Fountain without losing a drop](https://evilmartians.com/chronicles/big-on-heroku-scaling-fountain-without-losing-a-drop.md): How to get the most out of Heroku when scaling a successful startup.
- [Errors in Go: From denial to acceptance](https://evilmartians.com/chronicles/errors-in-go-from-denial-to-acceptance.md): Practical advice on getting the most out of handling errors "the Go way" from the creator of imgproxy and Overmind.
- [Five years of PostCSS: State of the Union](https://evilmartians.com/chronicles/five-years-of-postcss-state-of-the-union.md): Andrey Sitnik on the past, the present and the future of PostCSS: a state of the union address on the 5th anniversary.
- [How a month without computers changed me](https://evilmartians.com/chronicles/how-a-month-without-computers-changed-me.md): I have sent a message to my family and delegated my open source projects to my friends. With my last tweet sent, I turn off my laptop, phone, and tablet. My Digital Sabbath begins in 10 minutes: no digital devices for the next month.
- [Meet Yabeda: A Ruby instrumentation framework](https://evilmartians.com/chronicles/meet-yabeda-modular-framework-for-instrumenting-ruby-applications.md): Adopt metrics-driven development with an extendable framework that supports Rails, Sidekiq and Prometheus out of the box.
- [Learning how to learn deep learning](https://evilmartians.com/chronicles/learning-how-to-learn-deep-learning.md): Tips from a Ruby developer and team lead turned deep learning enthusiast on how to start with Deep Learning and not get discouraged.
- [Lean by design: 5 wins for one product](https://evilmartians.com/chronicles/lean-by-design-5-wins-for-one-product.md): Five principles that helped us change the way we run product development at eBaymag.com as the project started to scale
- [The silence of the Ruby exceptions: a Rails/PostgreSQL database transaction thriller](https://evilmartians.com/chronicles/the-silence-of-the-ruby-exceptions-a-rails-postgresql-database-transaction-thriller.md): Here comes a tale on why you should never silence errors inside database transactions. Learn how to use transactions properly and what to do when using them is not an option. Spoiler: use PostgreSQL advisory locks!
- [Painless migration of existing Helm’s Tiller setup to Kubernetes Secrets](https://evilmartians.com/chronicles/migration-of-existing-helm-tiller-setup-to-kubernetes-secrets.md): Meet a command-line tool that solves a security problem with Helm installations by replacing unencrypted ConfigMaps for Tiller with industry-standard Kubernetes Secrets.
- [Level up for UX: Design lessons from video games](https://evilmartians.com/chronicles/level-up-for-ux-design-lessons-from-videogames.md): Take clues from video games, learn the psychology behind them, and apply those tricks to your product's user experience.
- [Living in sin (with Spring)](https://evilmartians.com/chronicles/living-in-sin-with-spring.md): A couple of tricks on using Spring in Ruby development.
- [Stick with security: YubiKey, SSH, GnuPG, macOS](https://evilmartians.com/chronicles/stick-with-security-yubikey-ssh-gnupg-macos.md): See how to go beyond standard U2F functionality of your YubiKey and authenticate via SSH from a Mac with a PGP key on a USB stick.
- [Is React Native podium-ready?](https://evilmartians.com/chronicles/is-react-native-podium-ready.md): How we embraced React Native while helping Podium to execute a new product strategy, and why we did not regret it. If you are considering React Native for your startup—our story may help you decide.
- [Deploying Ruby apps to Google Cloud Kubernetes Engine continuously with CircleCI](https://evilmartians.com/chronicles/deploying-ruby-apps-to-google-cloud-kubernetes-engine-circleci.md): A step-by-step How-To on deploying Ruby applications to Google Cloud Kubernetes Engine with CircleCI
- [Scroll to the future](https://evilmartians.com/chronicles/scroll-to-the-future-modern-javascript-css-scrolling-implementations.md): Everything you always wanted to know about implementing scrolling but were afraid to ask. We have scrolled to the bottom of modern web specifications to take you on a whirlwind tour of latest CSS and JavaScript features that make navigating around a single page smooth, beautiful and less resource-hungry.
- [Optimizing React: Virtual DOM explained](https://evilmartians.com/chronicles/optimizing-react-virtual-dom-explained.md): Learn about React's Virtual DOM and use this knowledge to speed up your applications. In this thorough beginner-friendly introduction to framework's internals, we will demystify JSX, show you how React makes rendering decisions, explain how to find bottlenecks, and share some tips to avoid common mistakes.
- [Clowne: Clone Ruby models with a smile](https://evilmartians.com/chronicles/clowne-clone-ruby-models-with-a-smile.md): Meet Clowne—a flexible tool for all your model cloning needs that comes with no strings attached. Your application does not have to be Rails or use Active Record. This Ruby gem shines at a common task: duplicating business logic entities. Read on to see how Clowne does the trick on an all too familiar e-commerce case.
- [Speaking with an accent](https://evilmartians.com/chronicles/speaking-with-an-accent.md): Speaking with an accent, and getting over it. Read these tips from Andrey Sitnik, lead frontend developer at Evil Martians, creator of Autoprefixer and PostCSS, and learn how to get out of your comfort zone and on a major tech conference stage, even if your spoken English lags behind your programming skills.
- [Rails’ after_commit everywhere](https://evilmartians.com/chronicles/rails-after_commit-everywhere.md): How to run arbitrary code on successful DB transaction.
- [Rails 5.2: Active Storage and beyond](https://evilmartians.com/chronicles/rails-5-2-active-storage-and-beyond.md): See what's new in Rails 5.2 and try its brand new Active Storage framework for file uploads with our detailed hands-on guide. Also covering Credentials, Current singleton, CSP configuration, Bootsnap.
- [Evil Front Part 3: Modern Frontend in Rails](https://evilmartians.com/chronicles/evil-front-part-3.md): An opinionated guide to modern, modular, component-based approach to handling your presentation logic in Rails that does not depend on any frontend framework. Follow this three-part tutorial to learn the bare minimum of up-to-date frontend techniques by example and finally make sense of it all. Part 3: using Action Cable as npm package with Webpack, deploying "sprocketless" Rails application to Heroku.
- [Evil Front Part 2: Modern Frontend in Rails](https://evilmartians.com/chronicles/evil-front-part-2.md): An opinionated guide to modern, modular, component-based approach to handling your presentation logic in Rails that does not depend on any frontend framework. Follow this three-part tutorial to learn the bare minimum of up-to-date frontend techniques by example and finally make sense of it all. Part 2: building static chat page with components, introducing helpers and generators
- [Evil Front Part 1: Modern Frontend in Rails](https://evilmartians.com/chronicles/evil-front-part-1.md): An opinionated guide to modern, modular, component-based approach to handling your presentation logic in Rails that does not depend on any frontend framework. Follow our three-part tutorial to learn the bare minimum of up-to-date frontend techniques by example and finally make sense of it all. Part 1: goodbye Asset Pipeline, code organization, linting.
- [Zero downtime rebranding](https://evilmartians.com/chronicles/zero-downtime-rebranding.md): Learn how to migrate your Heroku-hosted application from one domain name to another. See how to rewire an existing Rails project and make it work with multiple domains on the same Heroku instance. SSL caveats are covered too
- [Spend less on Google Translate](https://evilmartians.com/chronicles/spend-less-on-google-translate.md): We have open sourced an internal tool developed for eBaymag. It allowed us to spend three times less on Google Cloud Translation API. Learn the principle behind google_translate_diff gem and use it in your projects.
- [Embracing metrics as new tests](https://evilmartians.com/chronicles/embracing-metrics-as-new-tests.md): What happens to your code after it is deployed? Learn how to add monitoring tools like Prometheus to your workflow and how to report to Prometheus from Ruby.
- [Partition and conquer](https://evilmartians.com/chronicles/partition-and-conquer.md): How to perform partitioning in a large PostgreSQL table that is actively used in production with a Ruby on Rails application and not lose any data. Lessons from practice.
- [imgproxy: Resize your images instantly and securely](https://evilmartians.com/chronicles/introducing-imgproxy.md): Learn how to use imgproxy, a simple, framework-agnostic microservice to handle all your image resizing needs quickly and securely.
- [Size Limit: Make the Web lighter](https://evilmartians.com/chronicles/size-limit-make-the-web-lighter.md): Keep your JavaScript library or app size in check and find out what exactly makes your code bloat by using Size Limit. See how it can help you slim down the bundle considerably by following our example.
- [Factories or fixtures? Give me both!](https://evilmartians.com/chronicles/factories-or-fixtures.md): How to use a mix of factories and fixtures in Ruby to test for large data structures
- [Introducing Overmind and Hivemind](https://evilmartians.com/chronicles/introducing-overmind-and-hivemind.md): Never mind your usual Procfile manager, here’s Overmind and its little brother—Hivemind. Evil Martians use these tools over Foreman to manage Procfile-based applications for development.
- [Fighting the Hydra of N+1 queries](https://evilmartians.com/chronicles/fighting-the-hydra-of-n-plus-one-queries.md): The N+1 problem in Rails: short intro, how to tame it, gem bullet, introducing gem rspec-sqlimit, ActiveSupport instrumentation.
- [Autoprefixer 7.0 and Browserslist 2.0](https://evilmartians.com/chronicles/autoprefixer-7-browserslist-2-released.md): Autoprefixer 7.0 has been released! Learn about the key features—and why the addition of Browserslist 2.0 is the largest change.
- [Open Source Software. What is in a poke?](https://evilmartians.com/chronicles/open-source-software-whats-in-a-poke.md): How could we explore and measure the quality of Ruby open source projects? I will share some insights and introduce a new open source SaaS for ranking RubyGems!
- [AnyCable: Action Cable on steroids](https://evilmartians.com/chronicles/anycable-actioncable-on-steroids.md): This article tells the story of the AnyCable project that aims to increase Action Cable performance and capabilities.
- [Handling errors in a non-geek interface](https://evilmartians.com/chronicles/handling-errors-in-a-non-geek-interface.md): Contemporary interfaces can be complicated, tieing a lot of data sources together: i.e., a contact list can be imported from the device’s local storage, user pics come from the cloud storage, and the status comes from a social network. The more data vendors you have, the bigger is the chance something may go wrong and cause a malfunction.
- [Frontend Challenge Accepted: CSS 3D Cube](https://evilmartians.com/chronicles/frontend-challenge-accepted.md): Do you like challenges? Are you willing to take on a task that you’ve never come across before, and do it under a deadline? What if, in carrying out the task, you encounter a problem that appears unsolvable? I want to share my experience of using CSS 3D effects for the first time in a real project and to inspire you to take on challenges.
- [Logidze: for all those tired of versioning data](https://evilmartians.com/chronicles/introducing-logidze.md): This article introduces the new tool for logging database records changes, Logidze.
- [Compo: UI components in Sketch](https://evilmartians.com/chronicles/compo-sketch.md): Compo is a Sketch plugin that makes it easier to work with interface components. With Compo, pressing ⌘J is all it takes to turn a text layer into a button or put an existing component in order.
- [PostgreSQL and Rails, sitting in a tree](https://evilmartians.com/chronicles/postgresql-and-rails-sitting-in-a-tree.md): ActiveRecord allows different approaches for storing hierarchical structures in a database. In this article, I will try to determine what pattern is best to use when it comes to huge data.
- [PostCSS-modules: Isolate ’em all!](https://evilmartians.com/chronicles/postcss-modules-isolate-em-all.md): We’ve been struggling with global CSS for so many years. Now is the time to stop it. No matter what language or framework you use, CSS name clashing will never be an issue anymore. I’ll show you how to use PostCSS and PostCSS-modules to have it automatically dealt with at the server side.
- [An invitation system using URL Schemes and Universal Links](https://evilmartians.com/chronicles/invitation-system-using-url-schemes-and-universal-links.md): Our experience in making an invitation system on iOS using URL Schemes and lately introduced Universal Links
- [Bootstrap: an intervention](https://evilmartians.com/chronicles/bootstrap-an-intervention.md): One should always bear in mind that projects start as something simple and predictable—and later, as time goes by, they change beyond recognition. In the case of Bootstrap, it will be a huge problem while in the case of BEM or CSS Modules it will simply keep working.
- [5 tips for dealing with heavy ActiveRecord dashboards in Rails](https://evilmartians.com/chronicles/5-tips-for-activerecord-dashboards.md): Of course, good performance is quite possible with ActiveRecord. However, for dashboards, the trick is that using ActiveRecord for fetching data doesn’t mean that you have to operate with ActiveRecord objects in views.
- [How Ruby 2.2 can cause an out-of-memory server crash](https://evilmartians.com/chronicles/ruby-2_2-oom.md): Bad news—Ruby (MRI) can cause an out-of-memory server crash. The issue has first appeared with version 2.2.0-preview and remained ever since.
- [PostCSS becomes 1.5x faster](https://evilmartians.com/chronicles/postcss-1_5x-faster.md): In this article, I’ll talk about how we've made PostCSS 1.5 times faster in the 5.0.11 release.
- [Making a custom logger for Rails query optimization](https://evilmartians.com/chronicles/rails-query-optimizations.md): I've spent a lot of time figuring out where ActiveRecord chains were called and tracing problematic queries. That is why I've made a special logger to simplify this process
- [PostCSS Second Birthday](https://evilmartians.com/chronicles/postcss-second-birthday.md): In this article, I’ll talk about my work on a more complex idea of DHH — Rendering views outside of actions.
- [State Machine: The State Switcher](https://evilmartians.com/chronicles/state-machine-the-state-switcher.md): State Machine is a Sketch plugin. Installing it will allow you to use ⌃⌘S to switch an active tab on a tab bar you’re designing, an active navigation section in a menu, or a page number in a pagination control.
- [New feature in Rails 5: Render views outside of actions](https://evilmartians.com/chronicles/new-feature-in-rails-5-render-views-outside-of-actions.md): Learn about the new feature of Rails 5—rendering views outside of actions—directly from the author.
- [RailsConf 2015 Recap and Thoughts](https://evilmartians.com/chronicles/railsconf-2015-recap.md): Test runner, where.or, new test request API, Render From Anywhere and no more alias_method_chain
- [Rails 5: What’s new](https://evilmartians.com/chronicles/rails-5-whats-new.md): Test runner, where.or, new test request API, Render From Anywhere and no more alias_method_chain
- [An annoying Capistrano, Unicorn and Bundler issue](https://evilmartians.com/chronicles/an-annoying-capistrano-unicorn-and-bundler-issue.md): In short: always use an absolute path to Unicorn in Capistrano scripts; otherwise your application server will fail to restart after a number of deploys because of Capistrano release cleanups.
