# Codemancers > Codemancers is an AI-first engineering and product consulting company. We design, build, and ship intelligent products — combining deep software craftsmanship with modern AI to solve real-world problems at scale. ## Company - [Home](https://www.codemancers.com): Codemancers is an AI-first engineering and product consulting company. We design, build, and ship intelligent products — combining deep software craftsmanship with modern AI to solve real-world problems at scale. - [Services](https://www.codemancers.com/services): We build scalable web apps with React, Rails & Node.js, and more—offering AI driven innovation, product consulting, and custom software for real-world challenges. - [Contact](https://www.codemancers.com/contact): Schedule a free consultation with Codemancers to discuss custom software, product consulting, and AI-powered solutions. ## Services - [AI Readiness Audit](https://www.codemancers.com/services/ai-readiness-audit): A 2–3 week diagnostic that maps every AI opportunity across your stack, scored by business impact vs effort. You get a prioritized roadmap, a prototype for your top 2 use cases, and an executive deck your CTO can present to leadership. - [AI Cost Optimization](https://www.codemancers.com/services/ai-cost-optimization): We audit your models, prompts, and infrastructure costs, then fix what is quietly draining your budget - [MVP in a Week](https://www.codemancers.com/services/mvp-in-a-week): We extract the core, strip the noise, and ship something real. Ideal for founders and PMs who need to validate before committing to a full build. - [AI Governance and Security](https://www.codemancers.com/services/ai-governance-and-security): AI that meets your security standards, satisfies compliance requirements, and keeps your team in full control of every decision. We build the guardrails in from the start so compliance never becomes a blocker. - [Chief AI Officer As A Service](https://www.codemancers.com/services/chief-ai-officer-as-a-service): Build vs buy, AI roadmap, technical due diligence. We show up when the decisions actually matter. - [Legacy Modernization](https://www.codemancers.com/services/legacy-modernization): Done at scale: 1,000+ store retail platform, zero downtime, no docs to start from. We turn your liability into a foundation for AI. - [AI Maintenance and Support](https://www.codemancers.com/services/ai-maintenance-and-support): Model drift, output degradation, performance dips. We monitor, retrain, and tune so your AI investment keeps delivering ROI long after launch. ## Products - [Gather](https://www.codemancers.com/products/gather): AI-powered automation for standups, project tracking, retros, and blocker resolution—all in one place. - [Zuko](https://www.codemancers.com/products/zuko): An AI-powered CRM that helps you manage contacts, deals, and companies in one place, with smart, context-aware chat. ## Portfolio - [Enhancing Performance for Big Billion Day](https://www.codemancers.com/portfolio/flipkart): Optimizing eCommerce performance during India's largest online sale event - [Building a Robust Payment Ecosystem](https://www.codemancers.com/portfolio/midtrans): Creating secure and scalable fintech infrastructure for a leading payment provider - [Real-Time Betting Platform Using Elixir](https://www.codemancers.com/portfolio/fanduel): Creating a high-performance betting platform for real-time sports engagement - [GST Filing & Compliance Portal](https://www.codemancers.com/portfolio/cleartax): Streamlining tax compliance processes for thousands of businesses across India - [Micro-Lending Platform for E-Commerce](https://www.codemancers.com/portfolio/welab): Enabling instant financing solutions for online shoppers - [Transforming Sustainability Data Management](https://www.codemancers.com/portfolio/treeni): Revolutionizing environmental and sustainability reporting ## Engineering - [Blog](https://www.codemancers.com/blog): Stay updated with the Codemancers blog — we share insights, solutions, and stories from our tech journey, blending creativity, challenges, and a dash of fun. - [TILs](https://www.codemancers.com/tils): Concise insights, tips, and real-world lessons from software development. Learn something new every day with practical takeaways from the Codemancers team. - [Open Source](https://www.codemancers.com/open-source): Libraries and tools built and shared by Codemancers with the community. ## Blog Posts - [Protecting Your LLM Applications from Prompt Injection Attacks](https://www.codemancers.com/blog/prompt-injection-protection): Learn practical techniques to defend against prompt injection attacks in AI applications with simple code examples. - [How to Read a Flame Graph in Chrome DevTools](https://www.codemancers.com/blog/2026-02-20-how-to-read-a-flame-graph-in-chrome-devtools): A deep, practical guide to reading flame charts in Chrome DevTools, spotting expensive functions, and validating performance improvements. - [Ruby's JIT Journey: From MJIT to YJIT to ZJIT](https://www.codemancers.com/blog/rubys-jit-journey): A walkthrough of Ruby’s JIT history and the design ideas behind MJIT, YJIT, and ZJIT - [Evaluating LLM Agents: Confidence Through Pre-Production Testing](https://www.codemancers.com/blog/ai-evals-pre-production): How to design practical pre-production testing for LLM systems—using datasets, evaluators, and experiments to catch regressions before shipping. - [Evaluating LLM Agents: Building the Design Phase Right](https://www.codemancers.com/blog/design-phase-llm-agent-evaluations): The first step to production-ready agents. Master visual debugging, trace collection, and unit testing with LangGraph Studio, LangSmith, and Vitest before moving to pre-production. - [Reverse Proxying over WebSockets: Building a Production-Ready Local Tunnel](https://www.codemancers.com/blog/reverse-proxying-over-websockets): A practical look at the challenges of exposing local servers to the internet, and how we built a production-ready tunneling system using WebSockets and NestJS. - [Getting Started with DeepAgents: Building Structured, Long-Running AI Agents](https://www.codemancers.com/blog/intro-to-deep-agents): A practical introduction to LangChain’s Deep Agents—exploring planning, memory, iterative workflows, subagents, and how this framework enables long-horizon AI reasoning. - [Operating Kafka in Rails with Karafka: Production Architecture, Consumers, and DLQs (Part 2)](https://www.codemancers.com/blog/operating-kafka-in-rails-with-karafka-part-2): In Part 2, we dive deep into the Sync-Out pipeline—how Rails publishes events to Kafka, how our legacy adapter writes to SQL Server 2009 using TinyTDS, and how Dead-Letter Queues (DLQs) became our lifeline during production incidents. This post covers transaction management, service objects, and operational workflows for handling failures. - [Operating Kafka in Rails with Karafka: Production Architecture, Consumers, and DLQs (Part 1)](https://www.codemancers.com/blog/operating-kafka-in-rails-with-karafka-part-1): This post breaks down our production architecture for event streaming in Rails using Kafka and Karafka—from designing producers and consumer flows to handling failures with DLQs and keeping warehouse databases in sync reliably. - [Understanding the Browser's Layout Engine: Formatting Contexts, Stacking, and Compositing Explained](https://www.codemancers.com/blog/understanding-browser-layout-engine): This blog provides a comprehensive explanation of the browser's layout engine, including formatting contexts, stacking, and compositing. It covers the key concepts and processes that enable the browser to render web pages efficiently and accurately. - [OAuth Proxy Server: Handling Dynamic Redirect URIs in Development Environments](https://www.codemancers.com/blog/understanding-oauth-proxy): A comprehensive guide to implementing an OAuth proxy server for managing authentication across dynamic development URLs. Includes Rails implementation with Slack OAuth, middleware patterns, and solutions for ngrok, preview deployments, and PR review apps. - [From State to Edges: How LangGraph Connects the Dots](https://www.codemancers.com/blog/langgraph-states-nodes-edges): Explore LangGraph's Nodes and Edges, and learn how they shape intelligent and flexible AI workflows in JavaScript - [Step One in RAG: Building Your First Knowledge Retrieval Pipeline](https://www.codemancers.com/blog/step-one-in-rag): Learn how to build your first RAG pipeline by combining HuggingFace embeddings, Pinecone vector search, LangChain orchestration, and Perplexity-powered responses. - [LangGraph Explained: Building Smarter, More Reliable AI Agents](https://www.codemancers.com/blog/langgraph): Discover the need for LangGraph and how it powers reliable AI agents in JavaScript - [Real-Time Event Streaming in Rails with Apache Kafka and Karafka](https://www.codemancers.com/blog/kafka): This blog explains how to set up and use Apache Kafka with a Rails application, covering cluster setup with Docker, topics and partitions, and integration using the Karafka gem. - [Turn Data into Insights with Apache Superset](https://www.codemancers.com/blog/apache_superset): Discover how to get started with Apache Superset, a powerful open-source platform for modern data visualization and exploration. From setting up our environment to building interactive dashboards and leveraging advanced analytics, this guide walks us through everything we need to unlock deeper insights from our data - [Data Made Simple with Metabase](https://www.codemancers.com/blog/metabase): Learn how to set up and use Metabase, the open-source business intelligence platform that transforms your data into actionable insights. This comprehensive guide covers installation, dashboard creation, and advanced analytics features... - [Map Client Roles to User Groups in Keycloak](https://www.codemancers.com/blog/2025-07-25-map_client_roles_to_user_groups_in_keycloak): This guide provides a step-by-step process for administrators who want to streamline client-role-based access management in their Keycloak setup and access user roles from access token in rails app. - [Turbo Morphing —A Cleaner Way to Update Your Rails UI](https://www.codemancers.com/blog/2025-07-09-turbo-morphing): Turbo Morphing brings smarter UI updates to Rails—minimal code, no templates, and a smoother user experience. - [Convert Figma design to code](https://www.codemancers.com/blog/2025-07-08-convert-figma-design-to-code): Learn how to use the create-component package to instantly convert Figma designs into static UI components for React, Next.js, Vue, Angular, and more—styled with Tailwind CSS. This guide covers setup, design rules, conversion from design to code, and best practices for rapid, consistent UI development. - [Keycloak with Google Login](https://www.codemancers.com/blog/keycloak-with-google-login): This guide explains how to configure Google as an identity provider in Keycloak and allow users to log in only with Google.. - [What is TimescaleDB? A Beginner's Guide to Time-Series Data](https://www.codemancers.com/blog/2025-06-03-timescale-db): Discover TimescaleDB, a special type of database that's great at handling time-based data like sensor readings, website traffic, or stock prices. Learn how it helps to store and analyze large amounts of time-stamped information quickly and efficiently, making it perfect for modern applications that track data over time. - [Rails Inflections: The Magic Behind Singular and Plural Transformation](https://www.codemancers.com/blog/rails-inflections): Learn how Rails Inflector handles singular and plural forms with customizable rules - [Unleash the Power of Hotwire(Part 2): Getting Started with Stimulus](https://www.codemancers.com/blog/hotwire-in-rails-part-2): Learn the fundamentals of Stimulus, the lightweight JavaScript framework that complements Hotwire. Start with the basics and build your understanding step by step. - [Auth0 actions](https://www.codemancers.com/blog/auth0-actions): This blog explains how to configure Auth0 actions, specifically focusing on using the Post-Login action to restrict access based on the user's email domain during social logins, such as with Google. - [Understanding AI Orchestrators, Agents, Tools, and Workflow Automation](https://www.codemancers.com/blog/2025-03-12-understanding-ai-orchestrators-agents-tools): Discover how AI orchestrators, agents, and tools work together to automate workflows, enabling AI to interact with real-world systems efficiently. Learn how this structured approach enhances productivity and reduces manual effort. - [Enhancing AI Capabilities with Tool Calling](https://www.codemancers.com/blog/2025-03-03-enhancing-ai-capabilities-with-tool-calling): Supercharging AI with Tool Calling in NestJS Using AI-SDK - [Understanding the Rails Asset Pipeline](https://www.codemancers.com/blog/understanding-rails-asset-pipeline): A comprehensive guide to understanding the Rails Asset Pipeline, its features, and its role in modern web development. - [Next.js 15](https://www.codemancers.com/blog/2024-next.js-15-optimizing-cache-for-better-performance): Explore the caching strategy updates introduced in Next.js 15 - [Row level security in Postgres](https://www.codemancers.com/blog/row-level-security-in-postgres): Explore how to implement Row Level Security (RLS) in Postgres - [Keycloak Single Sign-On Integration with Rails using omniauth-keycloak gem](https://www.codemancers.com/blog/2024-11-14-keycloak-sso-with-rails-app): This guide walks you through setting up Keycloak locally using Docker, creating a realm, user, client and integrating Keycloak with a Rails application using the omniauth-keycloak gem for single sign-on (SSO). - [Mock External Services in Rails with WebMock and Rack](https://www.codemancers.com/blog/mock-external-services-in-rails-using-webmock): Discover how to mock external services in Rails application using WebMock and Rack to simplify testing - [Implementing Retrieval-Augmented Generation with LangChain, Pgvector and OpenAI](https://www.codemancers.com/blog/2024-10-24-rag-with-langchain): Learn how to implement Retrieval-Augmented Generation (RAG) using LangChain, Pgvector, and OpenAI to store document embeddings and generate context-aware responses - [Understanding Retrieval-Augmented Generation (RAG) with OpenAI](https://www.codemancers.com/blog/2024-09-17-rag): Explore how to enhance language models using Retrieval-Augmented Generation (RAG) with OpenAI's API. - [Managing Server State in React Application using React-Query](https://www.codemancers.com/blog/2024-managing-server-state-in-react-app-using-react-query): Explore how TanStack React Query simplifies server state management in React applications, covering topics such as caching, deduplication and state syncronization. - [Organizing ActiveRecord Models into a Tree Structure with the Ancestry Gem in Rails](https://www.codemancers.com/blog/maintaining-a-tree-structure-in-rails-with-the-ancestry-gem): This blog explains how to organize ActiveRecord models into a tree structure using the Ancestry gem in Rails to manage parent-child hierarchical structures. It covers the setup, features, and querying methods that make managing hierarchical data both simple and efficient. - [Passwordless Authentication Flow in Cognito User Pool](https://www.codemancers.com/blog/2024-08-21-passwordless-auth-cognito): Learn the steps and implementation of a passwordless authentication flow using AWS Cognito and custom Lambda functions. - [Understanding Database Connections in Rails](https://www.codemancers.com/blog/understanding-rails-database-connection): A comprehensive guide to database connections in Rails. Learn about configuring credentials, establishing TCP connections, setting session parameters, managing authentication, and optimizing performance with connection pooling. Understand how to ensure efficient communication between your Rails application and the database. - [How to Convert a React App to Native Mobile Apps Using Capacitor.js](https://www.codemancers.com/blog/2024-07-08-react-to-native-mobile-app-capacitor-js): A detailed guide on converting a React app to native Android and iOS apps using Capacitor.js. - [Unleash the Power of Hotwire(Part 1)](https://www.codemancers.com/blog/hotwire-in-rails-part-1): A detailed guide to Hotwire in Rails exploring turbo-drive, turbo-frames and turbo-streams. Learn how to build blazing-fast applications with real-time updates without full page reloads. - [Rails Autoloading - Classic and Zeitwerk](https://www.codemancers.com/blog/rails-autoloading-classic-and-zeitwerk): Discover the evolution from Rails Classic autoloader to the dynamic Zeitwerk. - [How to setup vitest in Next.js 14](https://www.codemancers.com/blog/2024-04-26-setup-vitest-on-nextjs-14): A detailed guide on setting up Vitest in Next.js 14. - [NextJS Integration with Contentful](https://www.codemancers.com/blog/2024-04-20-next-js-14-integration-with-contentful): A detailed guide on integrating NextJS with Contentful, utilizing i18n for internationalization and Contentful's Content Delivery API for content management. - [Next js 14 intercepting routes](https://www.codemancers.com/blog/2024-03-14-next-js-14-Intercepting-routes): Introduction to nextjs 14 intercepting routes - [Setting Up Google Sign-In in a Next.js App](https://www.codemancers.com/blog/2024-04-17-set-up-google-signin-next-js): Elevate your Next.js app's security and user experience with seamless Google Sign-In integration in this step-by-step guide. - [Running GitHub Actions Locally with act - A Comprehensive Guide](https://www.codemancers.com/blog/2024-03-19-act-guide-for-github-workflow): Exploring way to run Github actions locally with act. - [Exploring Auth0 Custom Actions](https://www.codemancers.com/blog/2024-02-27-exploring-auth0-actions): A look at how to create, manage, and utilize custom actions in various workflows, including login/post-login, machine-to-machine, password reset, pre and post-user registration, and sending phone messages. - [How to implement react hook form with headlessui](https://www.codemancers.com/blog/2024-02-22-react-hook-foem-with-headless-ui): Implement react hook form with headlessui - [Data Fetching Strategies in Next.js and Their Impact on Page Rendering and Performance](https://www.codemancers.com/blog/2024-02-20-nextjs-data-fetching-strategy): Explore Next.js data fetching strategies for efficient page rendering and performance. From pre-rendering, server-side rendering, to static-site generation to incorporating time-based and on-demand revalidation for real-time updates. - [Streamlining Development](https://www.codemancers.com/blog/2024-02-15-automate-preview-environment-in-fly): Learn how to optimize your development workflow by automatically setting up preview environments in fly.io whenever a pull request is opened. This blog post provides step-by-step guidance on configuring a preview app and a preview db in fly.io. - [Using AWS S3 with Rails ActiveStorage for File Uploads](https://www.codemancers.com/blog/2024-02-16-s3-for-rails-active-storage-blog): Guide to Setting Up AWS S3 Bucket for Rails Active Storage File Uploads - [Server Actions in Next.js 14](https://www.codemancers.com/blog/2024-02-08-server-actions): Dive into Server Actions in Next.js 14. This post covers everything from syntax and setup to dynamic content updates, learn about form submission handling, network requests, and strategies for seamless user experiences. - [An Introduction to Caching](https://www.codemancers.com/blog/2024-02-05-an-introduction-to-caching): Concepts and techniques of caching, a vital strategy for enhancing the performance of software systems. - [npm vs Yarn vs pnpm](https://www.codemancers.com/blog/2024-01-24-npm-yarn-pnpm): Compare npm, Yarn, and pnpm effortlessly for smarter package management decisions - [Exploring the GlideApps Data Grid React Package](https://www.codemancers.com/blog/2024-01-17-blog-glide-apps-grid): Experience unparalleled performance, rich rendering, and full TypeScript support with the GlideApps Data Grid React package. - [Asynchronous programming in Dart - Streams (Part II)](https://www.codemancers.com/blog/2024-01-08-asynchronous-programming-in-dart-part-2): Explore Streams in Dart, their types, creation techniques, and best practices for seamless asynchronous event handling. - [Asynchronous programming in Dart (Part I)](https://www.codemancers.com/blog/2023-12-25-asynchronous-programming-in-dart-part-1): Explore the essentials of asynchronous programming in Dart, from Isolates to Async/Await, and unravel the secrets of efficient, non-blocking code execution. - [Unlocking Global Reach](https://www.codemancers.com/blog/2023-10-21-i18n): Explore a comprehensive guide to Internationalization (i18n) in web development, including its significance, implementation in React and Gatsby, advantages, performance considerations, and optimization - [A Guide to Efficient Website Management](https://www.codemancers.com/blog/2023-10-16-content-management-system): Discover the potential of CMS for managing websites; it's user-friendly, economical, and SEO-friendly. - [Understanding How Strapi Works](https://www.codemancers.com/blog/2023-10-16-how-strapi-works): Unlock the potential of Strapi, the innovative headless CMS, with this guide. Explore its unique features, setup, content management, and API creation. - [Understanding basic CSS Units for web design and bridging the gap between Designer and Developers.](https://www.codemancers.com/blog/2023-09-15-beginners-guide-for-understanding-px-em-rem): A comprehensive guide for understanding the basic concepts of px, em, and rem units. Also learn about Tailwind config and how to use Figma's developer mode to close the gap between designers and developers. - [Command the Command Line](https://www.codemancers.com/blog/2023-09-13-essential-terminal-commands-every-developer-should-know): Understand the Terminal, and its importance. Explore basics like opening tabs, listing files, navigating, and running commands. Master file operations, file viewing, searching, and much more. - [Next MDX vs Next Contentlayer](https://www.codemancers.com/blog/2023-09-11-next-mdx-vs-next-contentlayer): A comparative overview of Next MDX and Next Contentlayer - [How do we automate OTP using gmail tester in cypress & playwright e2e test](https://www.codemancers.com/blog/2023-08-27-how-do-we-automate-OTP-using-gmail-tester-in-cypress-and-playwright-e2e-test): Automate OTP verification using the gmail-tester library in combination with Cypress and Playwright E2E tests - [How Does Gatsby Work ?](https://www.codemancers.com/blog/2023-03-14-how-does-gatsby-work): A high level overview of how gatsby works. - [Typescript 5](https://www.codemancers.com/blog/2023-08-21-typescript-5): New features and improvements for typescript 5.x - [Percentiles in Performance Testing](https://www.codemancers.com/blog/2023-08-18-percentiles-in-performace-testing): Understanding percentiles w.r.t performance - [Chrome Profiler, A Complete Guide](https://www.codemancers.com/blog/2023-08-18-chrome-profiler): Optimizing Web Performance Through Profiling and Analysis - [Testing Simplified](https://www.codemancers.com/blog/2023-07-29-comparision-between-playwright-and-cypress): Simplify your testing journey by comparing the strengths and weaknesses of Playwright and Cypress, and discover the testing tool that perfectly aligns with your needs. - [Streamlining User Access To OpenVPN A Step-by-Step Guide To Setting Up SSO For Your OpenVPN Server with Keycloak](https://www.codemancers.com/blog/2023-07-14-openvpn-with-keycloak-sso): Using a PAM module and Keycloak for authenticating connections to OpenVPN - [XSS attacks](https://www.codemancers.com/blog/2023-07-07-xss-attacks): Exploring XSS Attacks and Expanding Security Knowledge through meetup - [How to Test Received Emails with Cypress, Ethereal, and ImapFlow](https://www.codemancers.com/blog/2023-06-26-how-to-test-received-emails-with-cypress-ethereal-and-imapflow): Master email testing using Cypress, Ethereal, and ImapFlow to ensure accurate and reliable communication in our web applications. - [What is the Difference between Server Side Rendering and Client Side Rendering](https://www.codemancers.com/blog/2023-03-17-difference-between-ssr-and-csr): Understanding the key differences between rendering methods for Single Page Applications - [A Beginners Guide to A/B Testing](https://www.codemancers.com/blog/2023-03-13-a-b-testing): Test, compare, and optimize - [How Asynchronous JavaScript Works](https://www.codemancers.com/blog/2022-10-26-how-asynchronous-js-works): Understanding how JavaScript works behind the scenes and handles asynchronous functions - [Developing a design system, a design developer collaboration](https://www.codemancers.com/blog/2022-10-10-design-system-designer-developer-collab): Building and scaling a design system with Figma, React and Storybook - [The Way of the Frontend Debugging](https://www.codemancers.com/blog/2022-09-28-debugging-frontend): An attempt to put together some debugging experiences, techniques and tools for frontend - [Exploring the power of Redux-Saga by implementing cancellable polling.](https://www.codemancers.com/blog/2022-09-21-polling-redux-saga): An amazing alternative solution to websockets - [Overcoming the challenges associated with Parallax Scrolling](https://www.codemancers.com/blog/2022-09-07-parallax): Understanding and examining the pros and cons of the parallax scrolling strategies that can be used - [Secret Injection for Github Actions using AWS Secret Manager](https://www.codemancers.com/blog/2022-08-16-aws-secrets-injection-ec2): Fetch secrets from AWS secrets manager and inject them securely into your Github actions - [Integrate Sentry With Strapi](https://www.codemancers.com/blog/2022-05-10-integrate-sentry-with-strapi): Ways of integrating Sentry with Strapi - [Authenticated Requests to Strapi](https://www.codemancers.com/blog/2022-04-21-Authenticated-requests-in-Strapi): Making requests to Strapi endpoints as an authenticated user - [Tagged Templates](https://www.codemancers.com/blog/2022-04-09-tagged-templates): Understanding and exploring the applications built with tagged templates - [Netlify Deployment Previews for Self-hosted GitLab on Private Network](https://www.codemancers.com/blog/2022-03-18-netlify-manual-deploy-gitlab-ci): Deploying to Netlify from a private, self-hosted GitLab instance - [Strapi Local Plugin Development](https://www.codemancers.com/blog/2021-09-14-strapi-local-plugin-development): Local plugin development in strapi - [How to Release Artifacts Using Gitlab CICD](https://www.codemancers.com/blog/2021-08-31-release-artifacts-using-Gitlab-CICD): A guide on how to publish your generated artifacts using Gitlab CI/CD pipeline. - [Test cases using Jest and React Testing Library](https://www.codemancers.com/blog/2022-07-09-how-to-write-test-cases-using-jest-and-react-testing-library-in-react): Setup and write test cases in react using Jest and React testing library - [Batching in React](https://www.codemancers.com/blog/2021-06-29-Batching-in-React): Difference in batch updates before and after React18 - [Understanding how Redis eviction policies work](https://www.codemancers.com/blog/2021-05-21-understanding-how-redis-eviction-policies-work): Redis can be used as an LRU cache with right kind of eviction policy. We can have some fun figuring out how this actually works - [Guide to set up Gitlab CI for Rails tests](https://www.codemancers.com/blog/2021-05-14-Guide-to-setup-Gitlab-CI-for-Rails-test): Learn to run rails test on Gitlab CI pipeline - [Working around rate limiting external apis with Elixir](https://www.codemancers.com/blog/2021-04-20-working-around-rate-limiting-external-apis-with-elixir): Fetch movie rating from several API without hitting rate limits on failure retries - [Using Index of an array as KEY Can Lead to Bad Consequences](https://www.codemancers.com/blog/2021-04-14-Using-index-of-an-array-as-KEY-can-lead-to-bad-consequences): Ways of implementing keys and cases in which index can be used as key and vice-versa - [Real world usecase for GenServer and Agent in Elixir](https://www.codemancers.com/blog/2020-08-28-real-world-usecase-for-genserver-agent-in-elixir): Understand Agents in Elixir with a real world use case of refreshing OAuth2 access token - [What I Learned while working on an Elixir App](https://www.codemancers.com/blog/2020-08-28-what-i-learned-while-working-on-an-elixir-app): Learn tips about working on an Elixir App - [Poor Man's High Availability Vault Server With Auto Unseal Using KMS](https://www.codemancers.com/blog/2020-08-24-poor-mans-ha-vault-server-with-auto-unseal-using-kms): Achieve high availability for vault server with auto unseal using KMS - [Nuances of Elixir Releases for Phoenix Applications](https://www.codemancers.com/blog/2020-08-18-nuances-of-elixir-releases-for-phoenix-applications): Understand some of the scenarios of deploying a Phoenix application using Elixir Releases - [Diving into the internals of Gem packaging](https://www.codemancers.com/blog/2020-08-17-understanding-gem-packaging): A deep dive into RubyGems internals, gem anatomy, and how gem packaging enables distribution and installation. - [A real world use case with Elixir Recursion](https://www.codemancers.com/blog/2020-07-29-a-real-world-use-case-with-elixir-recursion): Learn to solve a business use case with Elixir Recursion - [A Full Stack Guide to Graphql](https://www.codemancers.com/blog/2020-07-15-a-full-stack-guide-to-graphql-react-client): Build a React app with graphql. - [Auto Deploy to Heroku Using Gitlab CI](https://www.codemancers.com/blog/2020-06-26-auto-deploy-to-heroku-using-gitlab-ci): Auto Deploy to Heroku Using Gitlab CI - [SSH Access Management - Control SSH Access With Vault OTP Engine (PART 2)](https://www.codemancers.com/blog/2020-05-04-ssh-access-management-part-2): Part 2 of the Vault SSH OTP series: configure a bastion host with vault-ssh-helper and set up Vault clients. - [SSH Access Management - Control SSH Access With Vault OTP Engine (PART 1)](https://www.codemancers.com/blog/2020-04-28-ssh-access-management-part-1): Secure SSH access with HashiCorp Vault's OTP engine. Part 1 covers the problem, solution design, and Vault setup. - [Encrypting and storing Kubernetes secrets in Git](https://www.codemancers.com/blog/2020-04-27-encrypting-and-storing-kubernetes-secrets-in-git): Learn how to encrypt & store Kubernetes secrets in Git - [A Full Stack Guide to Graphql](https://www.codemancers.com/blog/2020-03-16-a-full-stack-guide-to-graphql-elixir_phoenix_server): Build a full-blown GraphQL service which will let you query, change and create records in the database using elixir's web framework - [The Full-Stack guide to GraphQL](https://www.codemancers.com/blog/2020-03-04-a-full-stack-guide-to-graphql-node_server): Build a full-blown GraphQL service which will let you query, change and create records in the database - [Extract data from a QR code in Elixir](https://www.codemancers.com/blog/2020-02-27-extract-data-from-qr-code-in-elixir): Learn to extract data from a QR code in Elixir - [A quick introduction to parallelism in JavaScript](https://www.codemancers.com/blog/2020-02-17-concurrency_in_javascript_browser): Use web workers to spawn computationally expensive background tasks without interrupting the user interface workflows - [Overlap an image over a QR code using Mogrify](https://www.codemancers.com/blog/2020-01-02-overlap-an-image-over-a-qr-code-using-mogrify): Learn to overlap an image over QR code using Mogrify in Elixir - [Decluttering Translations in Rails Apps](https://www.codemancers.com/blog/2019-11-12-decluttering-translations-in-rails-apps): Approaches for clean rails translation files as application grows - [Sorbet - A static type checker for Ruby](https://www.codemancers.com/blog/2019-08-12-sorbet-type-checker-for-ruby): Adopting and incorporating a gradual type system for Ruby - [Switching an existing Phoenix app from Brunch to Webpack](https://www.codemancers.com/blog/2018-10-03-phonenix-webpack): Learn to switch an existing Phoenix app from Brunch to Webpack - [Ruby 2.5 adds KeyError#receiver and KeyError#key](https://www.codemancers.com/blog/2018-08-06-ruby-2-6-adds-key-error-receiver-key): Learn about KeyError#receiver which returns receiver associated with the KeyError object & KeyError#key returns the key which caused the exception - [Ruby 2.6 added options to Exception#full_message](https://www.codemancers.com/blog/2018-07-30-ruby-2-6-added-options-exception-full-message): Learn about options which Expection#full_message accepts - [Using Pundit for authorization in Rails - recipes and best practices](https://www.codemancers.com/blog/2018-07-29-leveraging-pundit): Make better authorization for your application. - [Frozen middleware with Rack freeze](https://www.codemancers.com/blog/2018-06-07-frozen-middleware-with-rack-freeze): Learn about freezing middleware with rack-freeze - [Interceptor](https://www.codemancers.com/blog/2018-04-24-intro-to-interceptor): Introducing Interceptor - A browser extension that mocks backend responses and how to use it. - [RubySpec for Tracepoint](https://www.codemancers.com/blog/2018-02-26-rubyspec-for-tracepoint): Learn more about ruby by contributing to RubySpec - [Elixir Remote Debugging](https://www.codemancers.com/blog/2017-11-22-elixir-remote-debugging): Learn how to connect to a production Elixir node from the local shell and use the debugger GUI to set breakpoints and debug. - [ReactJS](https://www.codemancers.com/blog/2017-06-03-reactjs-server-side-rendering-with-router-v4-and-redux): - [Autodeploy from github using AWS CodeDeploy](https://www.codemancers.com/blog/2016-12-26-autodeploy-from-github-using-aws-codedeploy): - [Elixir/Phoenix deployments using Distillery](https://www.codemancers.com/blog/2016-10-06-elixir-phoenix-distillery): Deploy Elixir/Phoenix apps using Distillery plugin - [React.js](https://www.codemancers.com/blog/2016-09-16-react-server-side-rendering): - [APIs supporting snake_case and camelCase with Rails](https://www.codemancers.com/blog/2016-03-25-api-transformations-in-rails): Supporting API conventions for client like reactjs can be quite tricky. This post talks about approach to make APIs accessible using snakecase or camelCase. - [Continuous Deployment using Docker Cloud](https://www.codemancers.com/blog/2016-07-25-continuous-deployment-using-docker-cloud): - [Working with Rails, Webpack and Heroku](https://www.codemancers.com/blog/2016-03-18-rails-webpack-heroku): Deploying a Rails app with Webpack asset management on Heroku can be tricky. However, Heroku provides lifecycle hooks on its NodeJs buildpack that will help make this easier. - [Understanding Exit Signals in Erlang/Elixir](https://www.codemancers.com/blog/2016-01-24-understanding-exit-signals-in-erlang-slash-elixir): Erlang is a powerful concurrent programming language that has Processes as a first class citizen. These are isolated by default. Just like in Unix, these processes can communicate using Signals. In this post we will see how to achieve that in Elixir. - [Visualizing Parallel Requests in Elixir](https://www.codemancers.com/blog/2016-01-15-visualizing-parallel-requests-in-elixir): Elixir, built on the battle-tested Erlang VM, is a language that has concurrency as its core ideas. I will introduce a monitoring utility shipped with the VM that helps us visualize HTTP requests. - [New in ActiveRecord](https://www.codemancers.com/blog/2015-12-23-new-in-batches-method-in-active-record): Rails 5 has a new feature added to ActiveRecord that makes working with batch data much more efficient. The `Model.in_batches` function passes a batch of records wrapped inside an ActiveRecord collection. - [Say goodbye to vendor prefixes with Autoprefixer](https://www.codemancers.com/blog/2015-09-25-say-goodbye-to-vendor-prefixes-with-autoprefixer): Autoprefixer is a tool that adds vendor prefixes to CSS based on the usage patterns and current state of support. This results in clean code and smaller CSS files. - [DIY Ruby CPU profiling - Part IV](https://www.codemancers.com/blog/2015-07-18-diy-ruby-cpu-profiling-part-iv): Ruby's TracePoint API is very powerful for building custom profilers. As the final post of the DIY CPU profiler series, this post will introduce how to get method runtime statistics and generate relevant graphs. - [DIY Ruby CPU profiling - Part III](https://www.codemancers.com/blog/2015-04-15-diy-ruby-cpu-profiling-part-iii): Ruby's TracePoint API is very powerful for building custom profilers. In this post I will talk about hooking into Ruby code execution life cycle using this API - [DIY Ruby CPU profiling - Part II](https://www.codemancers.com/blog/2015-03-12-diy-ruby-cpu-profiling-part-ii): Ruby's TracePoint API is very powerful for building custom profilers. In this post I will talk about Wall time and CPU time, and how to measure them for Ruby programs. - [DIY Ruby CPU profiling - Part I](https://www.codemancers.com/blog/2015-03-06-diy-ruby-cpu-profiling-part-i): Ruby's TracePoint API is very powerful and allows us to write custom profiling code without slowing down the execution of programs. In this post, I will introduce CPU profiling and 2 strategies to write one. - [Cake walk](https://www.codemancers.com/blog/2014-12-10-bower-with-rails): Traditionally, Rails 3.x and above come with Sprockets and asset management functions. However, using a JavaScript or CSS library with Sprockets means we'd have to roll them into gems with a specific directory heirarchy. Instead, we can leverage Bower to handle that for us. - [What you need to know about software process and tools as a non-tech product owner - Part 2](https://www.codemancers.com/blog/2014-06-11-what-you-need-to-know-about-software-process-and-tools-as-a-non-tech-product-owner-part-2): - [Using Git for Knowledge sharing](https://www.codemancers.com/blog/2014-05-01-using-git-for-knowledge-sharing): - [An Introduction to JSON Schema](https://www.codemancers.com/blog/2014-02-11-An-introduction-to-json-schema): JSON schema can help bring order to handling complex JSON interactions in APIs. For instance, you can avoid checking the types of incoming JSON and rely on JSON schema to do the validation. This post talks about similar usecases. - [What you need to know about software process and tools as a non-tech product owner - Part 1](https://www.codemancers.com/blog/2014-04-02-what-you-need-to-know-about-software-process-and-tools-as-a-non-tech-product-owner-part-1): - [Form object validations in Rails 4](https://www.codemancers.com/blog/2013-12-18-form-objects-validations): Interacting with complex web forms tends to become hairy pretty quickly. Using Form or Service objects to abstract out the complexity can help wrangle complexity. This post talks about how we use them to make code simpler. - [Design and Development Process](https://www.codemancers.com/blog/2014-01-29-design-and-development-process): - [Making an Indian agency work for your startup](https://www.codemancers.com/blog/2014-01-21-making-india-work-for-startup): - [Random Ruby tips from trenches #1](https://www.codemancers.com/blog/2014-01-07-random-ruby-tips-from-trenches-number-1): - [CSS3 Box Model behaviour](https://www.codemancers.com/blog/2013-11-17-box-model-behaviour): CSS Box Model is one of the fundamental concepts layout inside a browser. In this post you'll learn about the box-sizing property. - [Rendering images for Retina or any high DPI screens.](https://www.codemancers.com/blog/2013-11-03-image-rendering-on-hd-screens): There is a proliferation of high resolution screens on mobile devices, and non-optimized images tend to look ugly on them. This post introduces ways to use optimized images for use in HTML on high DPI screens. - [Setting up Emacs as Ruby development environment on OSX](https://www.codemancers.com/blog/2013-09-26-setting-up-emacs-as-development-environment-on-osx): - [How rails reloads your source code in development mode?](https://www.codemancers.com/blog/2013-10-03-rails-reloading-in-dev-mode): In this post, I will talk about how Rails 3.x reloads code in the development environment. - [Isolate Namespace in Rails Engines - A hack in itself](https://www.codemancers.com/blog/2013-09-22-isolate-namespace-in-rails-engines): - [Setting up Source Maps for CoffeeScript in Rails](https://www.codemancers.com/blog/2013-09-05-setting-up-source-maps-for-coffeescript-in-rails): - [Redefine rake routes to add your own custom tag in Rails](https://www.codemancers.com/blog/2013-07-12-redefine-rake-routes-to-add-your-own-custom-tag-in-Rails): - [Non native fullscreen for OSX on emacs 24.3](https://www.codemancers.com/blog/2013-07-05-non-native-fullscreen-for-osx-on-emacs-24-dot-3): - [Introducing Invoker - Manage processes in development envionment](https://www.codemancers.com/blog/2013-06-10-introducing-invoker): Invoker is a utility we wrote to ease setting up of local development environments and top level .dev domains. Read on to know how to use it. - [All you need to know about writing a mountable Rails Gem with rspec](https://www.codemancers.com/blog/2013-05-30-how-to-write-a-gem): - [Profile Ruby 2.0 apps using DTrace - part 2](https://www.codemancers.com/blog/2013-05-04-profile-ruby-2-dot-0-apps-using-dtrace-part-2): Ruby 2.0 and above has in-built support for DTrace hooks. This lets us profile Ruby programs. In this post, I'll go into the details of the features of DTrace. - [Vim tab completion for RubyMotion](https://www.codemancers.com/blog/2013-05-01-vim-tabcompletion-for-rubymotion): - [Rails Autoload Path](https://www.codemancers.com/blog/2013-05-01-rails-autoload-path): - [Profile Ruby 2.0 apps using DTrace - Part 1](https://www.codemancers.com/blog/2013-04-16-profile-ruby-apps-dtrace-part1): Ruby 2.0 and above has in-built support for DTrace hooks. This lets us profile Ruby programs. In this post, I'll introduce DTrace and how to add DTrace probes to a Ruby program. - [Using Backbone JS in multipage application](https://www.codemancers.com/blog/2013-04-06-backbone): This post talks about using the Backbone library with a Rails backend, and goes through some challenges and gotchas encountered during the process. - [Zoom pane in tmux](https://www.codemancers.com/blog/2013-03-31-tmux-zoom-pane): - [Poor man's rspec mode for emacs](https://www.codemancers.com/blog/2013-03-28-poor-mans-rspec-mode-for-emacs): - [Bundler](https://www.codemancers.com/blog/2013-03-27-bundle-clean): - [Git checkout previous branch](https://www.codemancers.com/blog/2013-03-17-git-checkout-previous-branch): - [Remove branches merged into master](https://www.codemancers.com/blog/2013-03-17-remove-branches-merged-into-master): - [Upgrading to Mountain Lion and your development environment](https://www.codemancers.com/blog/2012-07-27-mountain-lion): A nearly step-by-step guide to upgrade to Mountain Lion, and setting up a Ruby development environment - [The kitchen sink libraries](https://www.codemancers.com/blog/2012-05-08-dawn-of-the-kitchen-sink): The problem with kitchen sink libraries is feature creep. Sometimes all we need are small libraries that are easily readable.