<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged fullstack</title>
<link>https://coderlegion.com/tag/fullstack</link>
<description>Powered by Question2Answer</description>
<item>
<title>Modern Web Development in the Era of AI Agents</title>
<link>https://coderlegion.com/31085/modern-web-development-in-the-era-of-ai-agents</link>
<description>&lt;h2 id=&quot;beyond-the-prompt-modern-web-development-in-the-era-of-ai-agents&quot;&gt;Beyond the Prompt: Modern Web Development in the Era of AI Agents&lt;/h2&gt;
&lt;p&gt;If you have spent any time scrolling through developer feeds lately, you’ve probably noticed a shifting sentiment. With LLMs generating scaffolding, debugging code inline, and AI agents spinning up full-stack MVPs in seconds, it is easy to wonder: &lt;strong&gt;What is the actual role of a web developer today?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Are we just professional prompters now, or is there a deeper craft to building for the web?&lt;/p&gt;
&lt;p&gt;Let’s dive into how web development is evolving, what actually matters in the current ecosystem, and how modern engineers continue to ship robust, scalable applications.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-the-shift-from-boilerplate-to-architecture&quot;&gt;1. The Shift from Boilerplate to Architecture&lt;/h3&gt;
&lt;p&gt;Not long ago, a massive chunk of a web developer's day was spent writing boilerplate code—setting up routing, configuring webpack, wiring up form validation, and managing basic CSS layouts.&lt;/p&gt;
&lt;p&gt;Today, AI handles the syntax layer astonishingly well. But syntax is not architecture.&lt;/p&gt;
&lt;p&gt;The modern web developer spends less time typing syntax and more time acting as a &lt;strong&gt;systems architect&lt;/strong&gt;. Key responsibilities have shifted toward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data Flow &amp;amp; State Management:&lt;/strong&gt; Deciding how data moves across server components, edge workers, and client stores.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security &amp;amp; Auth Boundaries:&lt;/strong&gt; Ensuring that AI-generated endpoints don't accidentally leak data or introduce insecure direct object references (IDOR).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Budgets:&lt;/strong&gt; Optimizing Core Web Vitals, managing bundle sizes, and reducing layout shifts in complex reactive applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-the-tech-stack-dilemma-keep-it-lean&quot;&gt;2. The Tech Stack Dilemma: Keep It Lean&lt;/h3&gt;
&lt;p&gt;With frameworks and tooling evolving at breakneck speed, tech fatigue is real. Every week brings a new build tool, styling paradigm, or state library. However, elite teams are moving toward &lt;strong&gt;intentional minimalism&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Return of the Server:&lt;/strong&gt; Frameworks like Next.js, Remix, and SvelteKit have blurred the lines between frontend and backend. Server-Driven UI and React Server Components (RSCs) mean less JavaScript is shipped to the browser, leading to lightning-fast load times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Utility-First Styling:&lt;/strong&gt; Tailwind CSS remains a staple for rapid UI iteration, enabling developers to build responsive, accessible design systems without context-switching between stylesheets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing:&lt;/strong&gt; Deploying logic closer to the user via edge functions (Vercel, Cloudflare Workers) has made global latency nearly negligible.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-the-human-element-why-craft-still-matters&quot;&gt;3. The Human Element: Why Craft Still Matters&lt;/h3&gt;
&lt;p&gt;When anyone can prompt an AI to build a generic landing page, &lt;strong&gt;quality and polish are your competitive advantages.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI can write a React component, but it doesn't intuitively feel the micro-interactions, understand your user's specific emotional journey, or design an intuitive edge-case fallback when a network request fails.&lt;/p&gt;
&lt;p&gt;Great web development requires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Empathy for the User:&lt;/strong&gt; Building accessible (a11y) interfaces that work for screen readers, low-bandwidth connections, and diverse devices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debugging Complex Logic:&lt;/strong&gt; AI is great at writing code, but when a deeply nested race condition occurs across an asynchronous microfrontend architecture, you need a human engineer who can trace the stack trace and reason through the system state.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;summary-building-in-2026-and-beyond&quot;&gt;Summary: Building in 2026 and Beyond&lt;/h3&gt;
&lt;p&gt;Web development isn't dying; it’s graduating. By offloading mechanical coding tasks to AI tools, we are liberated to focus on what matters most: &lt;strong&gt;solving real user problems, building secure systems, and crafting delightful digital experiences.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;What's your take?&lt;/strong&gt; How has your workflow changed over the past year? Are you leaning entirely into AI-driven coding agents, or are you doubling down on foundational engineering principles? Drop a comment below and let's discuss!&lt;/p&gt;
&lt;/blockquote&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/31085/modern-web-development-in-the-era-of-ai-agents</guid>
<pubDate>Wed, 14 Oct 2026 14:59:05 +0000</pubDate>
</item>
<item>
<title>How to Migrate WordPress to a Static Site Builder (Step-by-Step)</title>
<link>https://coderlegion.com/30353/how-to-migrate-wordpress-to-a-static-site-builder-step-by-step</link>
<description>&lt;p&gt;Moving a WordPress website to a static site builder can reduce dependence on traditional WordPress hosting, plugins, themes, and server-side maintenance. It can also provide a simpler visual workflow for building and maintaining pages.&lt;/p&gt;
&lt;p&gt;But migrating a WordPress website is not the same as copying files from one server to another. WordPress stores content in a database and relies on themes, plugins, media files, and other components to produce the finished website. A visual site builder uses a different content and design system, so a successful migration requires planning, content export, rebuilding, testing, and careful handling of URLs.&lt;/p&gt;
&lt;p&gt;Platforms such as Webflow and Framer provide current migration workflows for WordPress sites. Webflow's official documentation describes the process as a rebuild rather than an automated transfer, while Framer provides a dedicated WordPress migration guide covering content, media, plugins, SEO, and CMS collections.&lt;/p&gt;
&lt;p&gt;Here is a practical step-by-step process for moving a WordPress website to a static-oriented site builder.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Audit the Existing WordPress Website&lt;br&gt;
Do not start rebuilding the website immediately.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;First, create an inventory of what currently exists.&lt;/p&gt;
&lt;p&gt;Review your WordPress pages, posts, categories, tags, custom post types, media files, forms, integrations, plugins, and important URLs. The purpose is to determine what actually needs to move and what can be removed.&lt;/p&gt;
&lt;p&gt;WordPress's export system can include posts, pages, custom post types, comments, custom fields, categories, tags, custom taxonomies, and users in its XML export.&lt;/p&gt;
&lt;p&gt;Your audit should answer several basic questions:&lt;/p&gt;
&lt;p&gt;Which pages are essential?&lt;br&gt;
Which blog posts need to be migrated?&lt;br&gt;
Which URLs receive significant traffic?&lt;br&gt;
Which images and downloadable files are still required?&lt;br&gt;
Which WordPress plugins provide functions that must be replaced?&lt;br&gt;
Which content belongs in a CMS collection?&lt;br&gt;
Which pages can become ordinary static pages?&lt;br&gt;
Are there outdated posts or pages that should be removed instead of migrated?&lt;br&gt;
Does the existing site use custom post types?&lt;br&gt;
Are there forms, newsletters, search functions, memberships, or ecommerce features that require replacement?&lt;br&gt;
Framer's current WordPress migration documentation similarly recommends cataloging pages, posts, custom post types, media, and plugins before migration.&lt;/p&gt;
&lt;p&gt;This audit prevents a common migration mistake: rebuilding every part of an old website without questioning whether those parts are still necessary.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Choose the Destination Builder&lt;br&gt;
The next decision is where the rebuilt website will live.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Webflow and Framer are two examples of visual platforms with current WordPress migration documentation.&lt;/p&gt;
&lt;p&gt;Webflow provides a CMS that uses Collections to manage structured dynamic content. It supports CSV import for CMS Collection items, which makes structured content migration possible after converting WordPress's XML export into a compatible CSV file.&lt;/p&gt;
&lt;p&gt;Framer also provides a CMS and documents several approaches for moving WordPress content, including CSV-based migration for larger amounts of structured content. Its documentation specifically describes mapping WordPress custom post types and ACF-managed content to CMS collections.&lt;/p&gt;
&lt;p&gt;The correct platform depends on the website rather than the migration tool alone.&lt;/p&gt;
&lt;p&gt;A simple marketing website with a few pages may require very little CMS structure. A publication with hundreds or thousands of articles requires a more deliberate content architecture.&lt;/p&gt;
&lt;p&gt;Before committing to the destination, check its current CMS limits, import capabilities, hosting requirements, forms, integrations, SEO controls, and domain configuration.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Back Up the WordPress Website&lt;br&gt;
Create a complete backup before making major migration changes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;WordPress recommends maintaining backups of both the database and the site's files. The database contains content such as posts, comments, and links, while the site's files contain WordPress core files, plugins, themes, images, and other website assets.&lt;/p&gt;
&lt;p&gt;Do not treat the WordPress XML export as a complete website backup.&lt;/p&gt;
&lt;p&gt;The WordPress export file is useful for moving content, but the official WP-CLI documentation notes that WXR exports do not include site configuration or the attachment files themselves.&lt;/p&gt;
&lt;p&gt;A proper backup gives you a recovery point if something goes wrong during the migration.&lt;/p&gt;
&lt;p&gt;Keep the original WordPress website available until the new website has been completely tested and launched.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Export Your WordPress Content&lt;br&gt;
WordPress provides a built-in export function under the administration area.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Go to:&lt;/p&gt;
&lt;p&gt;WordPress Dashboard → Tools → Export&lt;/p&gt;
&lt;p&gt;From there, select the content you want to export and download the generated XML file.&lt;/p&gt;
&lt;p&gt;WordPress calls this format WordPress eXtended RSS, or WXR. The export can contain posts, pages, custom post types, comments, custom fields, categories, tags, custom taxonomies, and users, depending on the selected content.&lt;/p&gt;
&lt;p&gt;For a migration, you may need separate exports or additional processing depending on the content structure and destination platform.&lt;/p&gt;
&lt;p&gt;Do not assume that exporting XML automatically creates a finished version of your new website. The XML is a content source. The destination builder still needs to receive that content in a structure it can understand.&lt;/p&gt;
&lt;p&gt;Webflow's current WordPress migration documentation specifically states that WordPress content is exported as XML and that the XML can be converted to CSV before importing it into Webflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Convert and Clean the Content&lt;br&gt;
This is one of the most important stages of the migration.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A WordPress site may contain content that depends on WordPress-specific formatting, shortcodes, plugins, custom fields, or theme functionality.&lt;/p&gt;
&lt;p&gt;Do not simply move the text and assume the formatting will remain identical.&lt;/p&gt;
&lt;p&gt;Review the exported content for:&lt;/p&gt;
&lt;p&gt;Shortcodes&lt;br&gt;
Broken HTML&lt;br&gt;
Unnecessary formatting&lt;br&gt;
Old internal links&lt;br&gt;
Missing images&lt;br&gt;
Unused metadata&lt;br&gt;
Outdated categories&lt;br&gt;
Duplicate content&lt;br&gt;
Plugin-specific elements&lt;br&gt;
Embedded content that depends on WordPress&lt;br&gt;
Custom fields that need new CMS fields&lt;br&gt;
If you are migrating to Webflow, its current documentation recommends converting the WordPress XML export into CSV before importing the content into a CMS Collection. Webflow's CMS importer then allows fields from the CSV to be mapped to existing or newly created Collection fields.&lt;/p&gt;
&lt;p&gt;Framer's migration documentation also identifies CSV import as a common approach for bulk WordPress content and recommends cleaning WordPress-specific formatting during the conversion process.&lt;/p&gt;
&lt;p&gt;This stage is an opportunity to improve the content database rather than reproduce unnecessary legacy structures.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rebuild the Content Structure&lt;br&gt;
Once the content is clean, determine how it should be organized in the new platform.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A WordPress blog might have posts, authors, categories, tags, featured images, excerpts, and custom fields. Your new builder may organize these differently.&lt;/p&gt;
&lt;p&gt;For example, a blog could use a CMS collection containing fields such as:&lt;/p&gt;
&lt;p&gt;Title&lt;br&gt;
Slug&lt;br&gt;
Author&lt;br&gt;
Publication date&lt;br&gt;
Featured image&lt;br&gt;
Excerpt&lt;br&gt;
Main content&lt;br&gt;
Category&lt;br&gt;
Tags&lt;br&gt;
SEO title&lt;br&gt;
Meta description&lt;br&gt;
The exact fields should match the requirements of the website.&lt;/p&gt;
&lt;p&gt;Webflow describes a CMS Collection as a structured database for a particular type of content. Its CMS allows dynamic content to be managed from a shared structure rather than manually maintaining repeated information across pages.&lt;/p&gt;
&lt;p&gt;This distinction matters because not every WordPress page should become a CMS item.&lt;/p&gt;
&lt;p&gt;A homepage, contact page, about page, and pricing page may be better treated as individual static pages. Blog posts, case studies, team members, products, or testimonials may be better managed through collections.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Import the Content&lt;br&gt;
After creating the destination CMS structure, import the prepared content.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In Webflow, the current workflow is to create a Collection, open its import function, upload the CSV, confirm the header row, map the columns to Collection fields, review the imported items, and complete the import. Webflow also provides error reporting when imported records fail.&lt;/p&gt;
&lt;p&gt;Large migrations should be handled in controlled batches rather than treated as one giant operation.&lt;/p&gt;
&lt;p&gt;Import a manageable group first.&lt;/p&gt;
&lt;p&gt;Then check:&lt;/p&gt;
&lt;p&gt;Titles&lt;br&gt;
Slugs&lt;br&gt;
Text formatting&lt;br&gt;
Images&lt;br&gt;
Categories&lt;br&gt;
Dates&lt;br&gt;
Author information&lt;br&gt;
Internal links&lt;br&gt;
Custom fields&lt;br&gt;
If the first batch works correctly, continue with the remaining content.&lt;/p&gt;
&lt;p&gt;This approach makes it easier to identify structural problems before they affect the entire migration.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rebuild the Website Design&lt;br&gt;
Content migration does not automatically reproduce the old WordPress theme.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The new website needs to be rebuilt using the destination platform's design system.&lt;/p&gt;
&lt;p&gt;Start with the site's core structure:&lt;/p&gt;
&lt;p&gt;Header&lt;br&gt;
Navigation&lt;br&gt;
Homepage&lt;br&gt;
Main content templates&lt;br&gt;
Blog or article template&lt;br&gt;
Footer&lt;br&gt;
Contact page&lt;br&gt;
Other important landing pages&lt;br&gt;
Then reproduce the visual elements that are actually required.&lt;/p&gt;
&lt;p&gt;This is another reason to audit the WordPress website before beginning. A migration is a good time to remove obsolete design components instead of rebuilding them simply because they existed in the old theme.&lt;/p&gt;
&lt;p&gt;Webflow explicitly describes WordPress migration as a rebuild in which page layouts, styles, CMS structures, and interactions are recreated in Webflow.&lt;/p&gt;
&lt;p&gt;Framer's migration documentation similarly separates content migration from the work of rebuilding the site's design and functionality.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Replace WordPress Plugin Functionality&lt;br&gt;
Plugins require special attention.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A WordPress plugin may provide forms, SEO functions, analytics integration, caching, redirects, ecommerce capabilities, social integrations, or other features.&lt;/p&gt;
&lt;p&gt;Those functions do not automatically transfer to the new platform.&lt;/p&gt;
&lt;p&gt;Create a plugin inventory and classify every plugin into one of three categories:&lt;/p&gt;
&lt;p&gt;Replace: The function is still required but must be implemented through another service or native feature.&lt;/p&gt;
&lt;p&gt;Rebuild: The function is important and must be recreated within the new platform.&lt;/p&gt;
&lt;p&gt;Remove: The function is no longer necessary.&lt;/p&gt;
&lt;p&gt;This prevents a common migration problem where the new website looks correct but loses important functionality.&lt;/p&gt;
&lt;p&gt;For example, if a WordPress contact form was responsible for receiving customer inquiries, the new website must have another verified method for receiving those submissions before the old website is retired.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Preserve Your URL Structure&lt;br&gt;
URL management is one of the most important parts of a migration.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;WordPress describes permalinks as the permanent URLs used for posts, pages, categories, tags, and other archive pages.&lt;/p&gt;
&lt;p&gt;Whenever practical, preserve existing URLs.&lt;/p&gt;
&lt;p&gt;If a URL must change, create a permanent redirect from the old address to the correct new address.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;Old URL:&lt;br&gt;
example.com/blog/website-speed-guide/&lt;/p&gt;
&lt;p&gt;New URL:&lt;br&gt;
example.com/website-speed-guide/&lt;/p&gt;
&lt;p&gt;The old URL should redirect to the new URL rather than simply returning an error.&lt;/p&gt;
&lt;p&gt;Webflow's migration documentation specifically includes 301 redirects and SEO considerations as part of its WordPress migration process.&lt;/p&gt;
&lt;p&gt;Framer's WordPress migration guidance also identifies URL mapping and permanent redirects as important parts of an SEO migration.&lt;/p&gt;
&lt;p&gt;Create a spreadsheet containing the old URL, new URL, and redirect destination before launch. This gives you a clear record of every URL change.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Recreate SEO Metadata&lt;br&gt;
Moving the visible content is not enough.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Review the SEO information associated with important pages and posts.&lt;/p&gt;
&lt;p&gt;Check:&lt;/p&gt;
&lt;p&gt;Page titles&lt;br&gt;
Meta descriptions&lt;br&gt;
Slugs&lt;br&gt;
Heading structure&lt;br&gt;
Canonical settings where applicable&lt;br&gt;
Image alt text&lt;br&gt;
Internal links&lt;br&gt;
XML sitemap&lt;br&gt;
Robots directives&lt;br&gt;
Redirects&lt;br&gt;
Do not automatically assume that the new platform will reproduce your WordPress SEO configuration.&lt;/p&gt;
&lt;p&gt;Some SEO settings may have been controlled by a WordPress plugin rather than WordPress itself. Those settings must be recreated using the capabilities of the destination platform.&lt;/p&gt;
&lt;p&gt;The goal is to make the new website understandable to both visitors and search engines while preserving important existing URLs.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Test the New Website Before Launch&lt;br&gt;
Never switch the domain immediately after finishing the build.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Test the new site first.&lt;/p&gt;
&lt;p&gt;Open important pages manually and inspect them on desktop and mobile devices.&lt;/p&gt;
&lt;p&gt;Test:&lt;/p&gt;
&lt;p&gt;Navigation&lt;br&gt;
Buttons&lt;br&gt;
Forms&lt;br&gt;
Images&lt;br&gt;
Videos&lt;br&gt;
Internal links&lt;br&gt;
External links&lt;br&gt;
Search functionality&lt;br&gt;
CMS templates&lt;br&gt;
Contact processes&lt;br&gt;
Redirects&lt;br&gt;
Page titles&lt;br&gt;
Meta descriptions&lt;br&gt;
404 behavior&lt;br&gt;
Downloadable files&lt;br&gt;
Pay particular attention to migrated articles.&lt;/p&gt;
&lt;p&gt;Open old high-value URLs and confirm that they either remain available at the same address or redirect correctly to the new location.&lt;/p&gt;
&lt;p&gt;Also test pages that were imported in bulk. A migration can succeed technically while individual records still contain missing images, broken formatting, or incorrect links.&lt;/p&gt;
&lt;p&gt;Webflow's current migration checklist recommends importing CMS content, designing pages and templates, and carrying out the migration in stages rather than treating content transfer as the entire process.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Connect the Domain and Launch&lt;br&gt;
Once testing is complete, configure the new platform for the production domain.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The exact domain process varies between site builders, so follow the current documentation for the platform you selected.&lt;/p&gt;
&lt;p&gt;Do not shut down the WordPress site before confirming that the new website is working on the production domain.&lt;/p&gt;
&lt;p&gt;Once the new site is live, test the most important URLs again.&lt;/p&gt;
&lt;p&gt;Check the homepage, major landing pages, high-traffic articles, contact forms, redirects, and other business-critical functions.&lt;/p&gt;
&lt;p&gt;Keep the WordPress backup even after launch.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Monitor the Website After Migration&lt;br&gt;
The migration is not finished simply because the new site is live.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Monitor the website after launch for broken links, missing pages, redirect problems, indexing issues, form failures, and missing assets.&lt;/p&gt;
&lt;p&gt;Compare the new website against your original migration inventory.&lt;/p&gt;
&lt;p&gt;If a page or feature was supposed to be transferred but cannot be found, investigate it immediately.&lt;/p&gt;
&lt;p&gt;It is also useful to keep the old URL-to-new URL mapping available after launch. If visitors or search engines encounter an old URL, the mapping tells you where that URL should lead.&lt;/p&gt;
&lt;p&gt;Common WordPress Migration Mistakes to Avoid&lt;br&gt;
Several mistakes repeatedly create unnecessary problems during website migrations.&lt;/p&gt;
&lt;p&gt;Migrating without a backup&lt;br&gt;
A WordPress XML export is not a complete backup of the entire site. Keep a separate backup of the database and files.&lt;/p&gt;
&lt;p&gt;Assuming the migration is automatic&lt;br&gt;
Webflow explicitly states that moving a WordPress site to Webflow requires rebuilding the site.&lt;/p&gt;
&lt;p&gt;Moving content without cleaning it&lt;br&gt;
Shortcodes, obsolete formatting, broken links, and plugin-dependent elements can survive the export process and cause problems in the new system.&lt;/p&gt;
&lt;p&gt;Ignoring URLs&lt;br&gt;
Changing URLs without implementing appropriate redirects can create broken links and unnecessary SEO problems.&lt;/p&gt;
&lt;p&gt;Forgetting plugin functionality&lt;br&gt;
A WordPress plugin may perform a critical task that is not visible on the front end. Inventory your plugins before migration.&lt;/p&gt;
&lt;p&gt;Launching without testing&lt;br&gt;
A website that looks correct on the homepage can still contain broken forms, missing images, incorrect links, or failed redirects elsewhere.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Migrating WordPress to a static-oriented site builder is best treated as a website reconstruction project, not a simple file transfer.&lt;/p&gt;
&lt;p&gt;The safest process is straightforward: audit the existing website, back up the WordPress installation, export the content, clean and restructure the data, import it into the new CMS, rebuild the design, replace essential plugin functionality, preserve URLs, configure redirects, reproduce important SEO information, test everything, and only then launch.&lt;/p&gt;
&lt;p&gt;Webflow and Framer both provide current documentation specifically addressing WordPress migrations, but their workflows demonstrate an important point: the destination platform needs to be planned around the site's actual content and functionality.&lt;/p&gt;
&lt;p&gt;A smaller WordPress site may require only a modest amount of rebuilding. A large content-driven website can require substantial preparation because every page, CMS record, image, URL, plugin function, and integration needs to be accounted for.&lt;/p&gt;
&lt;p&gt;The objective should not be to reproduce every technical detail of the old WordPress installation. The objective is to preserve the content and functionality that matter, establish an appropriate structure in the new platform, protect existing URLs where possible, and launch a website that can be maintained without carrying unnecessary WordPress complexity into the new system.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/30353/how-to-migrate-wordpress-to-a-static-site-builder-step-by-step</guid>
<pubDate>Thu, 08 Oct 2026 23:46:07 +0000</pubDate>
</item>
<item>
<title>From Software Development to AI &amp; Real Estate Tech — Waqas Ahmad’s Developer Journey</title>
<link>https://coderlegion.com/30296/from-software-development-to-ai-real-estate-tech-waqas-ahmads-developer-journey</link>
<description>&lt;h2 id=&quot;from-software-development-to-ai-amp-real-estate-tech-waqas-ahmad-s-developer-journey&quot;&gt;From Software Development to AI &amp;amp; Real Estate Tech — Waqas Ahmad’s Developer Journey&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;“Coding may help you build the product, but understanding people helps you build something people actually want to use.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Waqas Ahmad's journey into technology didn't begin with a computer.&lt;/p&gt;
&lt;p&gt;It began with his family.&lt;/p&gt;
&lt;p&gt;Growing up, he watched his father work hard to build a better future for the family. His father had come from a rural area near Burewala, supported his own education by teaching, and later spent years serving patients despite limited medical facilities.&lt;/p&gt;
&lt;p&gt;That example shaped Waqas's attitude toward education, hard work and persistence.&lt;/p&gt;
&lt;p&gt;Initially, Waqas wanted to become a doctor.&lt;/p&gt;
&lt;p&gt;He chose the medical stream during matric, but his father encouraged him to consider technology, believing computers would become increasingly important.&lt;/p&gt;
&lt;p&gt;Waqas changed direction.&lt;/p&gt;
&lt;p&gt;He studied ICS and eventually enrolled in a BS Computer Science program at Virtual University of Pakistan.&lt;/p&gt;
&lt;p&gt;But his path into software development wasn't straightforward.&lt;/p&gt;
&lt;p&gt;While studying, he also had family responsibilities and worked different local jobs, including as a helper, cashier and later handling accounts and store responsibilities at a restaurant.&lt;/p&gt;
&lt;p&gt;He continued studying alongside those responsibilities.&lt;/p&gt;
&lt;p&gt;Eventually, a school friend, Saulat Abbas, helped strengthen his programming skills and encouraged him to keep coding.&lt;/p&gt;
&lt;p&gt;Waqas started small.&lt;/p&gt;
&lt;p&gt;Calculators.&lt;/p&gt;
&lt;p&gt;Simple JavaScript games.&lt;/p&gt;
&lt;p&gt;Small projects.&lt;/p&gt;
&lt;p&gt;Then those experiments gradually became something more serious.&lt;/p&gt;
&lt;p&gt;He joined Pixel Perfects while still completing his degree and began working on real software projects.&lt;/p&gt;
&lt;p&gt;That was when technology stopped being only something he was studying.&lt;/p&gt;
&lt;p&gt;It became something he was building.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-learning-to-building-real-products&quot;&gt;From Learning to Building Real Products&lt;/h3&gt;
&lt;p&gt;Early in his development journey, Waqas was particularly interested in frontend development and UI/UX.&lt;/p&gt;
&lt;p&gt;He enjoyed thinking about how an interface should look, how users should move through it and how a product could become easier to understand.&lt;/p&gt;
&lt;p&gt;But working on real projects taught him that building software is only part of the equation.&lt;/p&gt;
&lt;p&gt;A product also needs users.&lt;/p&gt;
&lt;p&gt;Someone needs to understand those users.&lt;/p&gt;
&lt;p&gt;Someone needs to communicate with clients.&lt;/p&gt;
&lt;p&gt;Someone needs to explain what the product does.&lt;/p&gt;
&lt;p&gt;Someone needs to market it.&lt;/p&gt;
&lt;p&gt;And someone needs to make sure people can actually find it.&lt;/p&gt;
&lt;p&gt;That realization gradually expanded Waqas's role beyond pure development.&lt;/p&gt;
&lt;p&gt;His experience at Pixel Perfects exposed him to both sides.&lt;/p&gt;
&lt;p&gt;He worked on frontend and full-stack projects before moving into customer support and client communication.&lt;/p&gt;
&lt;p&gt;He discussed requirements with clients, handled orders and revisions, coordinated with developers and designers, and helped ensure projects were delivered according to expectations.&lt;/p&gt;
&lt;p&gt;Later, when EstateAI launched, his responsibilities expanded further into SEO, content marketing, product listings, directory submissions, blogs and social media.&lt;/p&gt;
&lt;p&gt;His technical background became an advantage.&lt;/p&gt;
&lt;p&gt;He wasn't simply marketing a technology product.&lt;/p&gt;
&lt;p&gt;He understood the technology behind it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-frontend-remained-important&quot;&gt;Why Frontend Remained Important&lt;/h3&gt;
&lt;p&gt;Although Waqas has worked across the stack, frontend and product experience remain the areas he enjoys most.&lt;/p&gt;
&lt;p&gt;He particularly enjoys taking an idea and turning it into an interface that people can actually use.&lt;/p&gt;
&lt;p&gt;Early in his development journey, he noticed that some of his friends were stronger in programming logic while he had a stronger eye for interfaces and user experience.&lt;/p&gt;
&lt;p&gt;Instead of treating that difference as a weakness, they worked together.&lt;/p&gt;
&lt;p&gt;He learned from them.&lt;/p&gt;
&lt;p&gt;They learned from him.&lt;/p&gt;
&lt;p&gt;Over time, Waqas became more comfortable working across the stack.&lt;/p&gt;
&lt;p&gt;His experience includes technologies such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React.js&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Firebase&lt;/li&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Bootstrap&lt;/li&gt;
&lt;li&gt;Git &amp;amp; GitHub&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But technical breadth isn't the only lesson he took from full-stack development.&lt;/p&gt;
&lt;p&gt;He learned that a feature can technically work and still have a problem.&lt;/p&gt;
&lt;p&gt;If users find it confusing or difficult to use, the product still needs improvement.&lt;/p&gt;
&lt;p&gt;That perspective has remained with him even as his career expanded into customer-facing and content roles.&lt;/p&gt;
&lt;p&gt;He naturally thinks about both sides:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How does it work technically?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How does it feel to the person using it?&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;when-development-meets-content&quot;&gt;When Development Meets Content&lt;/h3&gt;
&lt;p&gt;Waqas's move into content creation wasn't a complete departure from software development.&lt;/p&gt;
&lt;p&gt;It was an extension of it.&lt;/p&gt;
&lt;p&gt;He discovered that technical products need communication.&lt;/p&gt;
&lt;p&gt;A product can be well engineered and still fail to reach people if nobody understands what it does or why it matters.&lt;/p&gt;
&lt;p&gt;His work in content and SEO gave him a different perspective on technology.&lt;/p&gt;
&lt;p&gt;He began creating blogs, articles and social media content.&lt;/p&gt;
&lt;p&gt;He worked on SEO and backlink building.&lt;/p&gt;
&lt;p&gt;He listed products on relevant platforms.&lt;/p&gt;
&lt;p&gt;He helped with directory submissions and online visibility.&lt;/p&gt;
&lt;p&gt;He also continued communicating directly with customers.&lt;/p&gt;
&lt;p&gt;That combination taught him something important:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Good software needs good communication.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And good technical content requires an understanding of the technology behind it.&lt;/p&gt;
&lt;p&gt;For Waqas, development and content are therefore not completely separate disciplines.&lt;/p&gt;
&lt;p&gt;They solve different parts of the same problem.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;estateai-applying-ai-to-real-estate&quot;&gt;EstateAI: Applying AI to Real Estate&lt;/h3&gt;
&lt;p&gt;One of the most important products in Waqas's current journey is &lt;strong&gt;EstateAI&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The idea comes from a practical problem in real estate marketing.&lt;/p&gt;
&lt;p&gt;Property professionals often need to prepare and improve large numbers of property images before they can effectively market a listing.&lt;/p&gt;
&lt;p&gt;That can involve repetitive tasks such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improving images&lt;/li&gt;
&lt;li&gt;Staging empty rooms&lt;/li&gt;
&lt;li&gt;Changing the atmosphere of a photo&lt;/li&gt;
&lt;li&gt;Removing unwanted objects&lt;/li&gt;
&lt;li&gt;Visualizing different possibilities for a property&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;EstateAI approaches this as an AI-powered property marketing workspace.&lt;/p&gt;
&lt;p&gt;The goal isn't simply to generate an impressive image.&lt;/p&gt;
&lt;p&gt;It's to make AI useful inside an actual property marketing workflow.&lt;/p&gt;
&lt;p&gt;That distinction matters.&lt;/p&gt;
&lt;p&gt;A real estate professional needs more than an attractive AI-generated image.&lt;/p&gt;
&lt;p&gt;The property still needs to look like the same property.&lt;/p&gt;
&lt;p&gt;Its architecture matters.&lt;/p&gt;
&lt;p&gt;The room layout matters.&lt;/p&gt;
&lt;p&gt;The camera perspective matters.&lt;/p&gt;
&lt;p&gt;The overall identity of the space matters.&lt;/p&gt;
&lt;p&gt;AI becomes useful when it improves the presentation without losing those important characteristics.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;making-ai-useful-instead-of-just-impressive&quot;&gt;Making AI Useful Instead of Just Impressive&lt;/h3&gt;
&lt;p&gt;One of the biggest challenges Waqas sees in AI-powered real estate technology is balancing visual quality with accuracy.&lt;/p&gt;
&lt;p&gt;People may see impressive AI-generated images and assume every result will automatically be perfect.&lt;/p&gt;
&lt;p&gt;Professional workflows are different.&lt;/p&gt;
&lt;p&gt;Reliability and consistency matter just as much as visual quality.&lt;/p&gt;
&lt;p&gt;There is another challenge too:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The user shouldn't need to understand the technology.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A realtor shouldn't have to understand AI models, prompting techniques or complicated settings just to improve a property photo.&lt;/p&gt;
&lt;p&gt;That leads to one of Waqas's central product principles:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The value of AI isn't only in the underlying technology. It's in turning that technology into a workflow that solves a specific problem without creating unnecessary complexity for the user.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;start-with-the-user-not-the-technology&quot;&gt;Start With the User, Not the Technology&lt;/h3&gt;
&lt;p&gt;Waqas's experience in customer support has strongly influenced how he approaches product development.&lt;/p&gt;
&lt;p&gt;When you communicate directly with customers, you hear things developers don't always hear.&lt;/p&gt;
&lt;p&gt;Where people get confused.&lt;/p&gt;
&lt;p&gt;What they expected.&lt;/p&gt;
&lt;p&gt;What frustrates them.&lt;/p&gt;
&lt;p&gt;Which features they actually care about.&lt;/p&gt;
&lt;p&gt;That experience changed how Waqas thinks about software.&lt;/p&gt;
&lt;p&gt;Instead of starting with:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“What can this technology do?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;He prefers to start with:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“What problem are we solving?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And then:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Does this actually make the user's work easier?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is particularly important with AI.&lt;/p&gt;
&lt;p&gt;AI makes it possible to build an enormous number of technically impressive features.&lt;/p&gt;
&lt;p&gt;But technically impressive doesn't automatically mean useful.&lt;/p&gt;
&lt;p&gt;Good product development means being honest about what the technology can actually do while designing the experience around what users genuinely need.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;coderswire-and-the-reality-of-product-development&quot;&gt;CodersWire and the Reality of Product Development&lt;/h3&gt;
&lt;p&gt;Another important project in Waqas's journey was &lt;strong&gt;CodersWire&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Unlike an academic exercise, it gave him an opportunity to work on a real-world product.&lt;/p&gt;
&lt;p&gt;His contribution was mainly focused on the frontend and UI/UX side, working with technologies including Next.js, TypeScript, MUI, Tailwind CSS, Google Maps and React Slick.&lt;/p&gt;
&lt;p&gt;The project also involved backend technologies including NestJS, MySQL, TypeORM, AWS and Nodemailer.&lt;/p&gt;
&lt;p&gt;The experience reinforced a lesson that goes beyond any individual technology:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Building software is very different from completing a coding task.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A real product requires thinking about the complete system.&lt;/p&gt;
&lt;p&gt;How components communicate.&lt;/p&gt;
&lt;p&gt;How users interact with the interface.&lt;/p&gt;
&lt;p&gt;How the application evolves.&lt;/p&gt;
&lt;p&gt;How different people contribute.&lt;/p&gt;
&lt;p&gt;How the product responds to changing requirements.&lt;/p&gt;
&lt;p&gt;It also reinforced the importance of collaboration.&lt;/p&gt;
&lt;p&gt;Waqas had friends and colleagues who were stronger in areas where he was still developing, particularly programming logic and backend concepts.&lt;/p&gt;
&lt;p&gt;Working with them helped him improve faster than trying to learn everything alone.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-customer-support-taught-him-about-ux&quot;&gt;What Customer Support Taught Him About UX&lt;/h3&gt;
&lt;p&gt;Working directly with customers changed Waqas's thinking about software more than he expected.&lt;/p&gt;
&lt;p&gt;As a developer, it can be easy to focus on whether a feature technically works.&lt;/p&gt;
&lt;p&gt;Customer conversations reveal another reality.&lt;/p&gt;
&lt;p&gt;A technically correct product can still be difficult to use.&lt;/p&gt;
&lt;p&gt;Or difficult to understand.&lt;/p&gt;
&lt;p&gt;Or simply different from what the customer expected.&lt;/p&gt;
&lt;p&gt;In his customer-facing role, Waqas dealt with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project discussions&lt;/li&gt;
&lt;li&gt;Client requirements&lt;/li&gt;
&lt;li&gt;Orders&lt;/li&gt;
&lt;li&gt;Coordination&lt;/li&gt;
&lt;li&gt;Deliveries&lt;/li&gt;
&lt;li&gt;Revisions&lt;/li&gt;
&lt;li&gt;Communication between customers, designers and developers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That experience taught him to look beyond what customers literally say and try to understand what they actually need.&lt;/p&gt;
&lt;p&gt;He now carries that perspective into both product development and content creation.&lt;/p&gt;
&lt;p&gt;When he explains or promotes a product, he tries to think about the questions a real user would ask rather than simply listing technical features.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;turning-complex-technology-into-simple-ideas&quot;&gt;Turning Complex Technology Into Simple Ideas&lt;/h3&gt;
&lt;p&gt;Waqas's approach to technical content starts with the audience.&lt;/p&gt;
&lt;p&gt;A developer might immediately understand terms such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;AI models&lt;/li&gt;
&lt;li&gt;Server-side rendering&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But a business owner or general user may not need to understand all of those technical details.&lt;/p&gt;
&lt;p&gt;So Waqas asks three questions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What does this technology do?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why does it matter?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How can it help the person reading it?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From there, he prefers simple language, practical examples and real use cases.&lt;/p&gt;
&lt;p&gt;His development background helps him understand the technical side.&lt;/p&gt;
&lt;p&gt;His customer-facing experience helps him communicate that technical side.&lt;/p&gt;
&lt;p&gt;For him, good technical content shouldn't make readers feel like they need a technical background just to understand the idea.&lt;/p&gt;
&lt;p&gt;It should leave them with a clear understanding of what the technology means and why it matters.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;ai-and-the-role-of-human-judgment&quot;&gt;AI and the Role of Human Judgment&lt;/h3&gt;
&lt;p&gt;Waqas sees AI as one of the most useful tools available to modern developers and content creators.&lt;/p&gt;
&lt;p&gt;It can reduce repetitive work.&lt;/p&gt;
&lt;p&gt;It can help explore solutions.&lt;/p&gt;
&lt;p&gt;It can generate initial code.&lt;/p&gt;
&lt;p&gt;It can help with debugging ideas.&lt;/p&gt;
&lt;p&gt;It can support learning unfamiliar concepts.&lt;/p&gt;
&lt;p&gt;In content and marketing, AI can assist with research, brainstorming, drafting and organizing information.&lt;/p&gt;
&lt;p&gt;But Waqas doesn't see AI as a replacement for human judgment.&lt;/p&gt;
&lt;p&gt;In fact, he believes AI can make human judgment more important.&lt;/p&gt;
&lt;p&gt;Someone still needs to decide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is the output accurate?&lt;/li&gt;
&lt;li&gt;Does it actually solve the problem?&lt;/li&gt;
&lt;li&gt;Is the message appropriate for the audience?&lt;/li&gt;
&lt;li&gt;Does the result feel authentic?&lt;/li&gt;
&lt;li&gt;Is the idea worth pursuing?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI can generate possibilities.&lt;/p&gt;
&lt;p&gt;Humans still need to decide which possibilities are worth pursuing.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-challenge-of-building-while-life-keeps-moving&quot;&gt;The Challenge of Building While Life Keeps Moving&lt;/h3&gt;
&lt;p&gt;One of the biggest challenges in Waqas's journey wasn't purely technical.&lt;/p&gt;
&lt;p&gt;It was building a career while managing responsibilities outside his studies.&lt;/p&gt;
&lt;p&gt;There were periods when he worked long hours in local jobs while continuing his education.&lt;/p&gt;
&lt;p&gt;He also had family responsibilities.&lt;/p&gt;
&lt;p&gt;That made his path slower and more difficult than simply focusing entirely on university and coding.&lt;/p&gt;
&lt;p&gt;There was another challenge too.&lt;/p&gt;
&lt;p&gt;He recognized that he wasn't equally strong in every part of development.&lt;/p&gt;
&lt;p&gt;UI/UX and frontend came naturally to him.&lt;/p&gt;
&lt;p&gt;Programming logic required more practice.&lt;/p&gt;
&lt;p&gt;Instead of treating that difference as a reason to stop, he learned from people around him.&lt;/p&gt;
&lt;p&gt;Saulat Abbas helped strengthen his coding foundation.&lt;/p&gt;
&lt;p&gt;Working with Abdullah Sheikh taught him the value of collaboration, particularly because Abdullah was strong with JavaScript logic.&lt;/p&gt;
&lt;p&gt;That experience taught Waqas something important:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Progress doesn't always mean being the best person in the room.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes it means finding people you can learn from.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;don-t-limit-yourself-to-coding&quot;&gt;Don't Limit Yourself to Coding&lt;/h3&gt;
&lt;p&gt;For Waqas, one of the biggest lessons from his career is that developers shouldn't limit themselves to coding.&lt;/p&gt;
&lt;p&gt;Technical skills are important.&lt;/p&gt;
&lt;p&gt;But building a product requires much more.&lt;/p&gt;
&lt;p&gt;It requires understanding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Marketing&lt;/li&gt;
&lt;li&gt;Customer support&lt;/li&gt;
&lt;li&gt;Business problems&lt;/li&gt;
&lt;li&gt;Product positioning&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;His own career demonstrates that.&lt;/p&gt;
&lt;p&gt;He has moved between:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customer support.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Content.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SEO.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Product marketing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Each role gave him a different perspective on how software actually reaches people and serves customers.&lt;/p&gt;
&lt;p&gt;That combination has become one of his strengths.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;start-small-and-build-for-real&quot;&gt;Start Small and Build for Real&lt;/h3&gt;
&lt;p&gt;For developers who want to build their own products, Waqas recommends starting before they feel completely ready.&lt;/p&gt;
&lt;p&gt;Talk to users early.&lt;/p&gt;
&lt;p&gt;Understand the problem before deciding what technology to build.&lt;/p&gt;
&lt;p&gt;Learn enough about marketing and communication to explain the product clearly.&lt;/p&gt;
&lt;p&gt;And don't wait until you know everything.&lt;/p&gt;
&lt;p&gt;A first project doesn't need to be impressive.&lt;/p&gt;
&lt;p&gt;It could be:&lt;/p&gt;
&lt;p&gt;A calculator.&lt;/p&gt;
&lt;p&gt;A simple game.&lt;/p&gt;
&lt;p&gt;A small web application.&lt;/p&gt;
&lt;p&gt;What matters is actually building it.&lt;/p&gt;
&lt;p&gt;Those early projects teach concepts that tutorials alone can't provide.&lt;/p&gt;
&lt;p&gt;They also create the confidence needed to tackle larger problems later.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;don-t-compare-your-timeline&quot;&gt;Don't Compare Your Timeline&lt;/h3&gt;
&lt;p&gt;Waqas's own journey is a good example of why comparing development timelines can be misleading.&lt;/p&gt;
&lt;p&gt;His path wasn't straightforward.&lt;/p&gt;
&lt;p&gt;He changed direction from medicine to computer science.&lt;/p&gt;
&lt;p&gt;He worked local jobs while studying.&lt;/p&gt;
&lt;p&gt;He developed his programming skills gradually.&lt;/p&gt;
&lt;p&gt;He moved between development, customer support, content, SEO and product marketing.&lt;/p&gt;
&lt;p&gt;He became involved with AI and real-estate technology.&lt;/p&gt;
&lt;p&gt;None of it happened through a perfectly planned route.&lt;/p&gt;
&lt;p&gt;And that's okay.&lt;/p&gt;
&lt;p&gt;His advice is not to compare your timeline with someone else's.&lt;/p&gt;
&lt;p&gt;Technology changes constantly.&lt;/p&gt;
&lt;p&gt;The important skills are not limited to a particular framework or programming language.&lt;/p&gt;
&lt;p&gt;The ability to learn.&lt;/p&gt;
&lt;p&gt;The ability to adapt.&lt;/p&gt;
&lt;p&gt;The ability to communicate.&lt;/p&gt;
&lt;p&gt;And the willingness to keep improving.&lt;/p&gt;
&lt;p&gt;Those skills continue to matter even when the technology changes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;looking-ahead-ai-saas-and-real-estate&quot;&gt;Looking Ahead: AI, SaaS and Real Estate&lt;/h3&gt;
&lt;p&gt;Waqas's current interests sit at the intersection of three areas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SaaS.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real estate technology.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;His experience with EstateAI has shown him how much opportunity exists in industries that still contain manual and repetitive workflows.&lt;/p&gt;
&lt;p&gt;He wants to continue exploring AI-powered products that solve practical business problems rather than simply adding AI because it is popular.&lt;/p&gt;
&lt;p&gt;At the same time, he wants to continue improving his development skills while remaining involved in content, SEO and product marketing.&lt;/p&gt;
&lt;p&gt;That combination suits the way he naturally thinks about technology.&lt;/p&gt;
&lt;p&gt;He enjoys being involved at different stages of a product:&lt;/p&gt;
&lt;p&gt;From understanding the technology.&lt;/p&gt;
&lt;p&gt;To thinking about the user.&lt;/p&gt;
&lt;p&gt;To communicating the product's value.&lt;/p&gt;
&lt;p&gt;To helping people discover it.&lt;/p&gt;
&lt;p&gt;Long term, he wants to contribute to products where technology, business and user experience come together in a meaningful way.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-doctor-to-developer&quot;&gt;From Doctor to Developer&lt;/h3&gt;
&lt;p&gt;Looking back, Waqas's journey could have gone in a completely different direction.&lt;/p&gt;
&lt;p&gt;He initially wanted to become a doctor.&lt;/p&gt;
&lt;p&gt;His father encouraged him to consider technology.&lt;/p&gt;
&lt;p&gt;He changed direction.&lt;/p&gt;
&lt;p&gt;He studied computer science.&lt;/p&gt;
&lt;p&gt;He worked local jobs while studying.&lt;/p&gt;
&lt;p&gt;He learned from friends.&lt;/p&gt;
&lt;p&gt;He built small projects.&lt;/p&gt;
&lt;p&gt;He entered professional software development.&lt;/p&gt;
&lt;p&gt;Then his career expanded beyond development into customer support, content, SEO and product marketing.&lt;/p&gt;
&lt;p&gt;Today, he's working around AI and real-estate technology while continuing to develop his technical skills.&lt;/p&gt;
&lt;p&gt;The journey wasn't linear.&lt;/p&gt;
&lt;p&gt;But every stage contributed something.&lt;/p&gt;
&lt;p&gt;His father's example taught him persistence.&lt;/p&gt;
&lt;p&gt;Working while studying taught him resilience.&lt;/p&gt;
&lt;p&gt;Friends taught him collaboration.&lt;/p&gt;
&lt;p&gt;Development taught him how to build.&lt;/p&gt;
&lt;p&gt;Customer support taught him how users think.&lt;/p&gt;
&lt;p&gt;Content and SEO taught him how to communicate value.&lt;/p&gt;
&lt;p&gt;And AI is giving him new ways to connect technology with real-world problems.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;building-at-the-intersection&quot;&gt;Building at the Intersection&lt;/h3&gt;
&lt;p&gt;Waqas's story isn't simply about becoming a better programmer.&lt;/p&gt;
&lt;p&gt;It's about discovering that technology products live at the intersection of many disciplines.&lt;/p&gt;
&lt;p&gt;Code matters.&lt;/p&gt;
&lt;p&gt;But so does design.&lt;/p&gt;
&lt;p&gt;So does communication.&lt;/p&gt;
&lt;p&gt;So does marketing.&lt;/p&gt;
&lt;p&gt;So does customer understanding.&lt;/p&gt;
&lt;p&gt;And increasingly, so does AI.&lt;/p&gt;
&lt;p&gt;His journey has taken him across all of those areas.&lt;/p&gt;
&lt;p&gt;And that may ultimately become his biggest advantage.&lt;/p&gt;
&lt;p&gt;Because building a useful product isn't just about asking:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Can we build it?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It's also about asking:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Should we build it?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Who needs it?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Will they understand it?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Will they actually use it?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Does it solve a real problem?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For Waqas Ahmad, those questions are becoming just as important as the code itself.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;about-waqas-ahmad&quot;&gt;About Waqas Ahmad&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Waqas Ahmad&lt;/strong&gt; is a Software Engineer and Content Creator working across software development, AI, digital marketing and real-estate technology.&lt;/p&gt;
&lt;p&gt;His technical background includes JavaScript, TypeScript, React.js, Next.js, Node.js, Express.js, MongoDB, MySQL, Firebase, REST APIs, Tailwind CSS, Bootstrap and Git/GitHub.&lt;/p&gt;
&lt;p&gt;He has worked on full-stack applications, developer platforms and AI-powered real-estate products, while also building experience in customer support, SEO, content marketing and product communication.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/WAQAS+AHMAD&quot;&gt;View Waqas's profile on CoderLegion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.dotera.co&quot;&gt;Visit Waqas's website&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;coderlegion-developer-stories&quot;&gt;CoderLegion Developer Stories&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Real developers. Real journeys. Real experiences.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Developer Stories at CoderLegion gives developers an opportunity to share how they think, what they build, the problems they encounter and what they learn along the way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interview &amp;amp; Story by Mehadi Hasan&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Dev Stories</category>
<guid isPermaLink="true">https://coderlegion.com/30296/from-software-development-to-ai-real-estate-tech-waqas-ahmads-developer-journey</guid>
<pubDate>Thu, 08 Oct 2026 12:57:44 +0000</pubDate>
</item>
<item>
<title>Hi, I'm Arham Sayyed: full-stack dev, occasional security researcher, full-time curious person</title>
<link>https://coderlegion.com/29149/hi-im-arham-sayyed-full-stack-dev-occasional-security-researcher-full-time-curious-person</link>
<description>&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/zk6wb17h8z5be1tbkt4s.jpeg&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;the-short-version&quot;&gt;The short version&lt;/h3&gt;
&lt;p&gt;I'm Arham Sayyed. I build full-stack apps for a living, break things for fun (and sometimes for money), and teach undergrads how to do both, badly at first, better eventually.&lt;/p&gt;
&lt;p&gt;Stack of choice: MERN, Next.js, React Native, TypeScript. If it's not in that list, I've probably still touched it, just less happily.&lt;/p&gt;
&lt;h3 id=&quot;how-i-actually-got-here&quot;&gt;How I actually got here&lt;/h3&gt;
&lt;p&gt;I didn't start out planning to split my time between &quot;ship this for a client by Friday&quot; and &quot;why does this SIEM alert look wrong.&quot; It happened in the normal messy way: one freelance project led to another, one curiosity about &lt;em&gt;why&lt;/em&gt; an app was insecure turned into actually building security tooling, and one guest lecture turned into an ongoing teaching gig I didn't see coming.&lt;/p&gt;
&lt;p&gt;Most of my paid work has been freelance and contract: restaurant tech, internal tools, automation that saves someone three hours a week they'll never think about again. The unglamorous stuff, mostly. I like it because the constraints are real: real users, real deadlines, real &quot;wait, why is this endpoint public&quot; moments at 11pm.&lt;/p&gt;
&lt;h3 id=&quot;the-security-rabbit-hole&quot;&gt;The security rabbit hole&lt;/h3&gt;
&lt;p&gt;The instinct that makes me decent at building software is the same one that makes me decent at breaking it: I don't like taking &quot;it works&quot; at face value. That curiosity eventually turned into contributing to &lt;a rel=&quot;nofollow&quot; href=&quot;https://ctf.haxnation.org&quot;&gt;Haxnation&lt;/a&gt;'s platform engineering. I worked on the backend behind their SOC simulation platform, which maps realistic SIEM alerts and analyst triage workflows to the MITRE ATT&amp;amp;CK framework so people can practice incident response against scenarios that actually resemble the real thing, not a sanitized textbook version.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/b86iqxdv6re7vwmvc05o.png&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
&lt;p&gt;Alongside that, I've been building out a threat-intel aggregation tool for myself (RSS/Atom feeds, dedup, a terminal UI because I have a weakness for TUIs), and I spend a fair amount of time at Mumbai's cybersecurity meetups and CTFs, mostly listening to people smarter than me talk about things breaking in new ways.&lt;/p&gt;
&lt;h3 id=&quot;the-teaching-side&quot;&gt;The teaching side&lt;/h3&gt;
&lt;p&gt;I lecture Programming Languages and Web Technologies to students at a college in Mumbai. I did not expect this to become a real part of my career, and yet, here we are.&lt;/p&gt;
&lt;p&gt;What surprised me most is how much it sharpens my own understanding. You can hold a fuzzy mental model of something and still ship working code with it. You cannot stand in front of 40 students and explain that fuzzy model without someone asking the one question that reveals you never actually understood it. Teaching has made me a better engineer more directly than almost any project has.&lt;/p&gt;
&lt;h3 id=&quot;things-i-ve-built-that-i-m-reasonably-proud-of&quot;&gt;Things I've built that I'm reasonably proud of&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A SOC simulation backend&lt;/strong&gt; (Haxnation): JWT auth, MITRE ATT&amp;amp;CK-mapped alert scenarios, JSON-driven so new attack scenarios don't need a database migration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A job-outreach automation tool&lt;/strong&gt;, open-sourced, that does company discovery, contact extraction, and LLM-personalized outreach with a human still in the loop, because fully autonomous cold outreach is how you get your domain blacklisted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A QR-code digital menu platform&lt;/strong&gt; for restaurants: unglamorous, genuinely useful, still running.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A handful of open source contributions&lt;/strong&gt;: a merged fix in Pyrebase4, a 440+ line documentation pass on Multer's internals, and a small API migration when a free-tier shutdown nearly killed a public quotes API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/mms-forced-align&quot;&gt;mms-forced-align&lt;/a&gt;&lt;/strong&gt;: a Node.js/TypeScript port of CTC forced alignment on top of Meta's MMS acoustic model. Give it audio plus a transcript you already know was spoken, get back the start/end timestamp of every word. As far as I can tell, no published JS implementation of MMS-based forced alignment existed before this; the closest tools were Python-only. It also does something I haven't seen elsewhere in JS: romanizing 20 Indic languages internally so you can align native-script transcripts (Hindi, Tamil, Urdu, Bengali, and so on) and get timings mapped back onto the original script. Verified against &lt;code&gt;torchaudio&lt;/code&gt;'s pipeline down to sub-millisecond accuracy, and, mildly satisfying, faster than it in CPU benchmarks too.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;also-this-one-s-actually-shipped&quot;&gt;Also, this one's actually shipped&lt;/h3&gt;
&lt;p&gt;Most of what's above is backend work nobody outside the project sees. This one's different: &lt;strong&gt;Read Me When&lt;/strong&gt; is a React Native app, live on Google Play, built as a product of Build Incredibles.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/ix1awokomktikeyckoon.png&quot; alt=&quot;Image description&quot;&gt;&lt;br&gt;
The idea is simple: some feelings are too big for words, so instead of searching, you just pick how you're feeling: happy, anxious, thankful, lonely, angry, sad. The app draws a Quranic verse matched to that feeling. Tap in and you get the Arabic text, transliteration, full translation, recitation audio, and classical tafsir, so you're not just reading words out of context. Save what speaks to you, share it as a designed card, browse by feeling later. No account, no ads. Everything lives locally on the device.&lt;/p&gt;
&lt;p&gt;It's the one project on this list where the &quot;does it actually work under real use&quot; question isn't about uptime or load, it's about whether it's actually useful to someone at 2am when they open the app because they don't have the words for what they're feeling. That's a much harder bar than anything else here.&lt;/p&gt;
&lt;p&gt;the interesting part was never the recognition, it was the &quot;how do I make this messy, half-formed idea actually work under real load&quot; problem in the middle.&lt;/p&gt;
&lt;h3 id=&quot;what-i-ll-probably-write-about-here&quot;&gt;What I'll probably write about here&lt;/h3&gt;
&lt;p&gt;Mostly: things I build, things that broke while I was building them, and whatever I've been thinking about at the intersection of web dev and security. Sometimes teaching stories, if they generalize past &quot;why did nobody submit the assignment on time.&quot;&lt;/p&gt;
&lt;p&gt;If you're building something similar, breaking something similar, or teaching something similar, say hi. I'm at arhamsayyed.dev@gmail.com, or &lt;a rel=&quot;nofollow&quot; href=&quot;https://x.com/arhamsayyed_dev&quot;&gt;@arhamsayyed_dev&lt;/a&gt; on X.&lt;/p&gt;
&lt;h3 id=&quot;my-socials&quot;&gt;My Socials&lt;/h3&gt;
&lt;p&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://instagram.com/_thatguywearinghoodie/&quot;&gt;Instagram&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://x.com/arhamsayyed_dev/&quot;&gt;X / Twitter&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://arhamsayyed.medium.com/&quot;&gt;Medium&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/in/arham-sayyed/&quot;&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/arham-sayyed/&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can also checkout &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.buildincredibles.com/&quot;&gt;Build Incredibles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/bh0tafyate8q55w101t8.gif&quot; alt=&quot;Image description&quot;&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29149/hi-im-arham-sayyed-full-stack-dev-occasional-security-researcher-full-time-curious-person</guid>
<pubDate>Tue, 29 Sep 2026 20:14:39 +0000</pubDate>
</item>
<item>
<title>I was hoping for conversation</title>
<link>https://coderlegion.com/25177/i-was-hoping-for-conversation</link>
<description>&lt;p&gt;When I started actually experimenting with transpiling my own ideas into the languages that the browser understands. I really didn't have any idea where I was going to end up.  I certanily didn't expect to flip the whole damn paradigm; but hey, the only way out is through, right?&lt;/p&gt;
&lt;p&gt;Don't hate me, but, I love JavaScript.  It's easy, fast to prototype, and runs absolutely everywhere (as long as &quot;everywhere&quot; is in a browser ;)&lt;/p&gt;
&lt;p&gt;HOWEVER!!! JavaScript's way of interfacing with its native sibling langs, is fucking atrocious!  In 30 years, the coolest component I ever built; might have been the most hideous code ever written.&lt;/p&gt;
&lt;p&gt;And it's completely understandable. Tell someone to build a programming language in 11 days. Not a GD one of us would do any better.&lt;/p&gt;
&lt;p&gt;So, obviously the most popular language in the world, has some room for improvement.&lt;/p&gt;
&lt;p&gt;I believe that, to some extent, I have done just that.  But that is only MY opinion. Which is worth about as much as it weighs.&lt;/p&gt;
&lt;p&gt;What is worth FAR more, is the convergence of ideas. The give and take, the controversy and cooperation. In short, conversation.&lt;/p&gt;
&lt;p&gt;I am devoid of the hubris required to say: &quot;I know better then all of you.&quot;&lt;/p&gt;
&lt;p&gt;But, if this path is worth walking. And I believe that it is. Then with some descent to what I might have gotten wrong. Some options I didn't see. etc.  scrml could be something special.&lt;/p&gt;
&lt;p&gt;I may be wrong. I accept that possibility gladly. But how will I ever know, without conversation?&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25177/i-was-hoping-for-conversation</guid>
<pubDate>Sun, 23 Aug 2026 16:53:14 +0000</pubDate>
</item>
<item>
<title>Choosing the Right Technology Stack for Startup MVP Development</title>
<link>https://coderlegion.com/23073/choosing-the-right-technology-stack-for-startup-mvp-development</link>
<description>&lt;h2 id=&quot;quick-overview&quot;&gt;Quick Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MVP stack decisions affect burn rate, iteration speed, and how easily&lt;br&gt;
a product can pivot after early user feedback&lt;/li&gt;
&lt;li&gt;Frontend framework choice trades short-term development speed against&lt;br&gt;
long-term maintainability and hiring pool depth&lt;/li&gt;
&lt;li&gt;Backend and database decisions determine how much technical debt&lt;br&gt;
accumulates before a funding round&lt;/li&gt;
&lt;li&gt;Managed hosting and serverless infrastructure remove operational&lt;br&gt;
overhead most early teams can't afford to staff&lt;/li&gt;
&lt;li&gt;The right stack matches the team's existing skills to the actual&lt;br&gt;
complexity the product needs to solve today&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most stack mistakes come from over-engineering for scale the product hasn't earned yet&lt;br&gt;
A founder sits down with two developers and six months of runway. Within the first week, they've already made the decision that will shape whether that runway stretches into a validated product or gets eaten by rewrites: what to build with. Choose a stack sized for a fifty-engineer company with a Series B budget, and half that runway disappears into infrastructure nobody asked for. Choose something so minimal it can't support the second version of the product, and the rebuild costs more than starting over would have. The stack is the first real constraint an MVP operates under, and it's usually chosen with the least information the company will ever have.&lt;/p&gt;
&lt;h2 id=&quot;why-the-stack-decision-shapes-your-learning-not-just-building&quot;&gt;Why the Stack Decision Shapes Your Learning, Not Just Building&lt;/h2&gt;
&lt;p&gt;An MVP exists to answer a question, not to demonstrate engineering sophistication. Its job is to test whether a core hypothesis about the market holds, not to prove the product can survive a load it doesn't have yet. Every hour spent building infrastructure for traffic that doesn't exist is an hour not spent finding out whether anyone wants the product. This is why many startups turn to &lt;a rel=&quot;nofollow&quot; href=&quot;https://wpwebinfotech.com/mvp-development/&quot;&gt;bespoke MVP development services&lt;/a&gt; that prioritize speed, validation, and practical execution over unnecessary technical complexity.&lt;/p&gt;
&lt;p&gt;This is where early technical decisions often go wrong. A team reaches for a distributed architecture or a trending framework nobody on the team has actually shipped with. None of that reduces risk at the MVP stage. What reduces risk is picking tools the team already understands well enough to move fast and debug quickly before a demo.&lt;/p&gt;
&lt;h2 id=&quot;aligning-a-startup-s-tech-stack-with-its-business-team-and-financing-&quot;&gt;Aligning a startup's tech stack with its business, team, and financing.&lt;/h2&gt;
&lt;p&gt;Every startup tech stack decision should start with two questions: what does the team already know, and how much runway exists to learn something new? A team of backend engineers with deep Node.js experience will ship faster on a JavaScript-heavy stack than on an unfamiliar framework, even one objectively better suited to the problem on paper. Familiarity compounds, and every unknown tool introduces debugging time unrelated to the actual product.&lt;/p&gt;
&lt;p&gt;Partnering with bespoke MVP development services can shorten this discovery phase and &lt;a rel=&quot;nofollow&quot; href=&quot;https://tivazo.com/blogs/boost-efficiency-with-top-web-development-tips/&quot;&gt;boost web development efficiency&lt;/a&gt; early on, since teams that have already shipped multiple MVPs know which stack trade-offs matter and which are noise. Business model matters just as much: a content-heavy marketplace has different data and rendering needs than a real-time collaboration tool, and picking a stack before understanding that shape almost always means picking the wrong one.&lt;/p&gt;
&lt;h2 id=&quot;frontend-choices-balancing-speed-and-flexibility&quot;&gt;Frontend Choices: Balancing Speed and Flexibility&lt;/h2&gt;
&lt;p&gt;React-based frameworks like Next.js remain a common MVP default because of their hiring pool, mature ecosystem, and built-in support for server-side rendering, which matters for pages that need to load fast and be indexed. Vue and Svelte offer a gentler learning curve, but the trade-off is a smaller hiring pool when contractors need to be brought in quickly.&lt;/p&gt;
&lt;p&gt;The real mistake isn't React versus Vue. It's adding architectural complexity, like micro-frontends or a custom design system, before there's a product mature enough to need either.&lt;/p&gt;
&lt;h2 id=&quot;backend-and-database-decisions-that-shape-debt-accumulation&quot;&gt;Backend and Database Decisions That Shape Debt Accumulation&lt;/h2&gt;
&lt;p&gt;A monolithic backend is almost always the right call for an MVP, even though microservices dominate engineering discourse. A monolith is easier to reason about, deploy, and refactor when the product's shape changes after user feedback. Splitting services prematurely adds latency and coordination overhead that a small team can't absorb.&lt;br&gt;
Database choice follows similar logic. PostgreSQL handles most early data models well, including ones that later need flexibility, since it supports JSON columns without a full migration to a document store. NoSQL earns its complexity when data is genuinely unstructured or write throughput at scale is a known near-term requirement, not a hypothetical one. REST covers almost every MVP's API needs; GraphQL earns its complexity only when the frontend genuinely needs flexible, nested data fetching across many client types.&lt;/p&gt;
&lt;h2 id=&quot;hosting-infrastructure-and-managed-services-case&quot;&gt;Hosting, Infrastructure, and Managed Services Case&lt;/h2&gt;
&lt;p&gt;Platform-as-a-service providers like Vercel, Render, and Railway remove most of the operational burden that used to require a dedicated DevOps hire. For a team without in-house infrastructure expertise, that trade-off almost always favors managed hosting over a self-managed cloud setup, even though raw cloud offers more control.&lt;/p&gt;
&lt;p&gt;That calculus flips once traffic and data volume grow, but that point is rarely reached during the MVP phase. What does matter early is a basic CI/CD pipeline from day one, so every deploy is tested and repeatable rather than a manual process someone has to remember correctly under pressure.&lt;/p&gt;
&lt;h2 id=&quot;common-founder-mistakes-in-choosing-an-mvp-stack&quot;&gt;Common Founder Mistakes in Choosing an MVP Stack&lt;/h2&gt;
&lt;p&gt;The most frequent mistake is over-engineering for a scale the product hasn't earned. Building for a million users when the real question is whether the first hundred will come back wastes time and money on problems that may never materialize.&lt;/p&gt;
&lt;p&gt;A close second is chasing a trending framework without checking whether the team has real depth in it. A stack that looks impressive on paper but that nobody can debug efficiently slows the product down exactly when speed matters most. Skipping basic observability, like error tracking and structured logging, is another common gap, since founders assume monitoring can wait, then end up debugging blind during the exact period when user trust is most fragile.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Getting the &lt;a rel=&quot;nofollow&quot; href=&quot;https://noloco.io/blog/best-tech-stack-for-startups&quot;&gt;startup tech stack&lt;/a&gt; right at the MVP stage isn't about picking the most advanced tools available. It's about matching the team's actual skills, the product's real data and interaction patterns, and the available runway to a set of choices that are boring enough to be reliable and familiar enough to move fast on. The goal isn't architectural perfection. It's building something real enough to test a hypothesis before the money runs out, on a foundation that won't need to be torn down the moment the product finds traction.&lt;/p&gt;
&lt;h2 id=&quot;frequently-asked-questions&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
&lt;h3 id=&quot;1-what-is-the-best-tech-stack-for-an-mvp-&quot;&gt;1. What is the best tech stack for an MVP?&lt;/h3&gt;
&lt;p&gt;There isn't a single best stack. The right choice depends on the team's existing skills, the product's data model, and available runway. A common, low-risk default is a monolithic backend, a relational database, and a mature frontend framework like React or Vue.&lt;/p&gt;
&lt;h3 id=&quot;2-should-startups-use-no-code-tools-instead-of-custom-development-for-an-mvp-&quot;&gt;2. Should startups use no-code tools instead of custom development for an MVP?&lt;/h3&gt;
&lt;p&gt;No-code tools can validate simple ideas quickly, but they hit limits fast once the product needs custom logic or real scale. Many founders use no-code to test demand, then move to custom development once the concept is validated.&lt;/p&gt;
&lt;h3 id=&quot;3-how-much-does-it-cost-to-build-an-mvp-with-a-custom-tech-stack-&quot;&gt;3. How much does it cost to build an MVP with a custom tech stack?&lt;/h3&gt;
&lt;p&gt;Cost varies widely by scope, team location, and complexity, so no universal figure applies. Scope creep is usually the bigger cost driver, since feature bloat adds development time regardless of the stack chosen.&lt;/p&gt;
&lt;h3 id=&quot;4-can-i-change-my-tech-stack-after-launching-an-mvp-&quot;&gt;4. Can I change my tech stack after launching an MVP?&lt;/h3&gt;
&lt;p&gt;Yes, and it's common. Many products rebuild parts of their stack once real usage reveals what the original architecture didn't anticipate. Choosing boring, well-documented tools at the MVP stage makes that migration easier.&lt;/p&gt;
&lt;h3 id=&quot;5-is-it-better-to-build-an-mvp-with-a-monolith-or-microservices-&quot;&gt;5. Is it better to build an MVP with a monolith or microservices?&lt;/h3&gt;
&lt;p&gt;A monolith is almost always the better choice. It's simpler to build, deploy, and debug with a small team. Microservices add overhead that rarely pays off until the product has proven demand and a team large enough to own separate services.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23073/choosing-the-right-technology-stack-for-startup-mvp-development</guid>
<pubDate>Mon, 20 Jul 2026 13:17:31 +0000</pubDate>
</item>
<item>
<title>Vibe Coding Isn't the Problem. Not Understanding the Stack Is.</title>
<link>https://coderlegion.com/21033/vibe-coding-isnt-the-problem-not-understanding-the-stack-is</link>
<description>&lt;p&gt;I am not a developer by profession or practice. I'm a systems engineer with 20 years of experience. I have never been a developer or written any real code -- I barely wrote scripts -- but since AI came out I have come out of my comfort zone and started building again.&lt;/p&gt;
&lt;p&gt;What I see in all the &quot;vibe code everything&quot; problems happening right now is that people are developing blindly. They don't understand the full stack. They see it as frontend and backend, when the full stack actually looks more like this (very partial list, just to make the point):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Source control&lt;/li&gt;
&lt;li&gt;Frontend application layer&lt;/li&gt;
&lt;li&gt;Backend application layer&lt;/li&gt;
&lt;li&gt;API layer&lt;/li&gt;
&lt;li&gt;Authentication and authorization&lt;/li&gt;
&lt;li&gt;Database layer&lt;/li&gt;
&lt;li&gt;Cache layer&lt;/li&gt;
&lt;li&gt;File/object storage&lt;/li&gt;
&lt;li&gt;Background jobs and messaging&lt;/li&gt;
&lt;li&gt;Web server / reverse proxy&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are several other layers under that, and this is exactly why vibe coding fails -- people don't understand the stack. I have spent my entire career building the foundation and the stack that developers use, and sometimes destroy. So when I vibe code, it's different: AI is only writing the application code. I'm still building the entire stack underneath it.&lt;/p&gt;
&lt;p&gt;The other piece is knowing all the parts well enough to ask questions and push back. When the AI makes a choice, I can ask why it chose that, or whether something else would be better. I also don't open a session with &quot;build me X.&quot; I spend about 30 minutes talking through the process and the ideas first, then have Claude generate the best prompt for itself, and hand that over to Claude Code.&lt;/p&gt;
&lt;p&gt;So to be clear: vibe coding is not a bad thing. It only becomes a problem when you don't understand the foundation and just want a single siloed change made with no idea what it touches.&lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/21033/vibe-coding-isnt-the-problem-not-understanding-the-stack-is</guid>
<pubDate>Sat, 20 Jun 2026 14:22:11 +0000</pubDate>
</item>
<item>
<title>Building Vylo — Looking for Collaborators, Partners &amp; Early Support</title>
<link>https://coderlegion.com/19478/building-vylo-looking-for-collaborators-partners-early-support</link>
<description>&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://auralenz.vercel.app&quot;&gt;https://auralenz.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vhj9vy1feiu8wjk01g53.png&quot; alt=&quot;Aura Lenz feed - Share your moments (Vylo) -  https://auralenz.vercel.app&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hatjyu89ep2iu5apuerr.png&quot; alt=&quot;messages - Share ideas and your moments with others (Vylo) - https://auralenz.vercel.app&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qy6v41tfrf4jqvkzfmyj.png&quot; alt=&quot;Video Call on Aura Lenz(Vylo) - https://auralenz.vercel.app&quot;&gt;&lt;/p&gt;
&lt;p&gt;Hey developers &lt;br&gt;
My name is &lt;strong&gt;Egimuk&lt;/strong&gt;, and I’m building &lt;strong&gt;Vylo&lt;/strong&gt; — a social platform focused on helping people connect, share, communicate, and build communities in a more modern and creative way.&lt;/p&gt;
&lt;p&gt;This project started as an idea called Aura Lenz, but after refining the vision and direction, I renamed it to Vylo.&lt;br&gt;
&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://auralenz.vercel.app&quot;&gt;https://auralenz.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
The Link is not yet changed&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is Vylo?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vylo&lt;/strong&gt; is being designed as a modern social/community platform with features around:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real-time chat and communication&lt;/li&gt;
&lt;li&gt;Social feeds and posts&lt;/li&gt;
&lt;li&gt;Communities and discussions&lt;/li&gt;
&lt;li&gt;Media sharing&lt;/li&gt;
&lt;li&gt;Modern UI/UX experience&lt;/li&gt;
&lt;li&gt;Scalable architecture for future growth&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The goal is not just to clone existing social apps, but to create something that&lt;em&gt; feels fresh&lt;/em&gt;, &lt;em&gt;lightweight&lt;/em&gt;, &lt;em&gt;community-driven&lt;/em&gt;, and &lt;em&gt;meaningful&lt;/em&gt; — especially for young people and growing digital communities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Current Stack&lt;/strong&gt;&lt;br&gt;
Currently working with technologies like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React + ShadcnUI + Vite&lt;/li&gt;
&lt;li&gt;Node.js + Express.js&lt;/li&gt;
&lt;li&gt;Socket.IO&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;TailwindCSS&lt;/li&gt;
&lt;li&gt;Modern scalable frontend architecture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why I’m Posting This&lt;/p&gt;
&lt;p&gt;I’m looking for:&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Collaborators&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Developers, designers, product thinkers, or anyone passionate about building modern platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Partners&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;People interested in helping shape the direction, growth, branding, marketing, or community side of the project.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Early Supporters / Investors&lt;/strong&gt;&lt;br&gt;
Individuals or organizations interested in supporting an ambitious African tech startup idea at an early stage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who I’d Love to Connect With:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Frontend developers&lt;/li&gt;
&lt;li&gt;Backend developers&lt;/li&gt;
&lt;li&gt;Mobile developers&lt;/li&gt;
&lt;li&gt;UI/UX designers&lt;/li&gt;
&lt;li&gt;Branding &amp;amp; marketing people&lt;/li&gt;
&lt;li&gt;Startup mentors&lt;/li&gt;
&lt;li&gt;Investors interested in African tech&lt;/li&gt;
&lt;li&gt;Students who want to build something impactful&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why I Believe in This Project:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I come from Rwanda, and I strongly believe more globally scalable tech products can emerge from Africa.&lt;/p&gt;
&lt;p&gt;Many young developers have ideas but lack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;collaboration opportunities&lt;/li&gt;
&lt;li&gt;mentorship&lt;/li&gt;
&lt;li&gt;funding&lt;/li&gt;
&lt;li&gt;strong communities&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I want Vylo to become more than just an app.&lt;br&gt;
I want it to become a platform built with community energy from the beginning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Current Stage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The project is still growing and evolving, but major foundations and ideas are already being developed.&lt;/p&gt;
&lt;p&gt;Right now, I’m mainly focused on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;feature planning&lt;/li&gt;
&lt;li&gt;UI/UX refinement&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;branding direction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Interested?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you’re interested in collaborating, partnering, supporting, or simply exchanging ideas, feel free to comment or reach out.&lt;/p&gt;
&lt;p&gt;You can even contact me on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;email: &lt;em&gt;Emails are not allowed&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;instagram: &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://instagram.com/__egimuk__&quot;&gt;https://instagram.com/__egimuk__&lt;/a&gt;&lt;/strong&gt;   or  &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://instagram.com/__vylo_&quot;&gt;https://instagram.com/__vylo_&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;auralenz(to be changed to Vylo): &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://auralenz.vercel.app/profile/__egimuk__&quot;&gt;https://auralenz.vercel.app/profile/__egimuk__&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’d genuinely love to connect with people who enjoy building ambitious things.&lt;/p&gt;
&lt;p&gt;Thanks for reading!&lt;br&gt;
&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://auralenz.vercel.app&quot;&gt;https://auralenz.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/19478/building-vylo-looking-for-collaborators-partners-early-support</guid>
<pubDate>Tue, 02 Jun 2026 13:30:26 +0000</pubDate>
</item>
<item>
<title>&quot;We need to rewrite everything from scratch.&quot; – said every CTO ever. </title>
<link>https://coderlegion.com/18599/we-need-to-rewrite-everything-from-scratch-said-every-cto-ever</link>
<description>&lt;p&gt;Sound familiar?&lt;/p&gt;
&lt;p&gt;A legacy system is slow. Buggy. Nobody understands the code anymore.&lt;/p&gt;
&lt;p&gt;The first instinct: Burn it down. Build it new.&lt;/p&gt;
&lt;p&gt;But here's the problem with &quot;rewrite from scratch&quot;:&lt;/p&gt;
&lt;p&gt; It takes 2–3x longer than estimated&lt;br&gt;
 It costs a fortune (and then some)&lt;br&gt;
 It often fails (Google &quot;rewrite from scratch disaster stories&quot;)&lt;br&gt;
 Your business doesn't stop while you rewrite&lt;/p&gt;
&lt;p&gt;There's a better way.&lt;/p&gt;
&lt;p&gt;Step-by-step modernization.&lt;br&gt;
One module at a time.&lt;br&gt;
No downtime.&lt;br&gt;
Fixed price.&lt;br&gt;
4–6 weeks.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=8951338227936840536&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;My question to you:&lt;/p&gt;
&lt;p&gt;Have you ever been part of a &quot;big rewrite&quot; project? How did it go? Success or disaster?&lt;/p&gt;
&lt;p&gt;Let me know in the comments. &lt;/p&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/18599/we-need-to-rewrite-everything-from-scratch-said-every-cto-ever</guid>
<pubDate>Thu, 21 May 2026 21:42:36 +0000</pubDate>
</item>
<item>
<title>Building a Member Portal in Vue.js: Lessons from a Professional Association Project</title>
<link>https://coderlegion.com/18309/building-a-member-portal-in-vue-js-lessons-from-a-professional-association-project</link>
<description>&lt;p&gt;Member portals look simple from the outside — log in, see your benefits, update your profile. The complexity is in the small things: session lifetimes, entitlement freshness, privacy compliance, and the fact that the people using it are members, not anonymous traffic, so the trust bar is higher.&lt;br&gt;
I worked on the member portal for a national professional association (ALPFA Plus — membership.alpfaplus.org). The stack: Vue.js on the frontend, Axios for the API layer, lit-html for some templated rendering, AWS CloudFront for delivery, New Relic for real-user monitoring, and Osano for cookie consent. Here's what I learned.&lt;br&gt;
Why Vue.js for a member portal&lt;br&gt;
The decision came down to two things: the team's familiarity, and the portal's interaction model. Member portals are heavy on stateful UI — your profile, your benefits, your event registrations all need to stay coherent as you move between sections. Vue's reactivity model fits that work well, and the single-file-component approach kept the team productive without heavy tooling investment.&lt;br&gt;
Axios + interceptors as the API contract&lt;br&gt;
The portal talks to backend services for membership, billing, and benefits. Rather than scatter fetch calls through components, the API layer is built around Axios with a small set of interceptors:&lt;/p&gt;
&lt;p&gt;Auth interceptor attaches the session token to every request and refreshes it transparently when needed&lt;br&gt;
Error interceptor maps backend error codes to user-friendly messages and surfaces session expiry uniformly&lt;br&gt;
Retry interceptor for transient failures (5xx, network errors) with exponential backoff&lt;/p&gt;
&lt;p&gt;The win: every component calls api.getMemberProfile() and doesn't think about auth, retries, or error mapping. The plumbing is in one place.&lt;br&gt;
Caching entitlements without going stale&lt;br&gt;
The naive version of a member portal hits the API every time a benefits page loads. That's wasteful — entitlements change rarely. The smart version caches them, but then you risk showing stale state when a member upgrades their tier.&lt;br&gt;
What works:&lt;/p&gt;
&lt;p&gt;Cache entitlements client-side with a short TTL (a few minutes)&lt;br&gt;
Invalidate aggressively on events that change entitlements (subscription change, plan upgrade, payment failure)&lt;br&gt;
Provide a &quot;refresh&quot; affordance for members who feel like the portal is out of sync&lt;/p&gt;
&lt;p&gt;Performance: where New Relic earned its keep&lt;br&gt;
Real-user monitoring matters more on member portals than on marketing sites. Members come back repeatedly, so consistent performance shapes their long-term perception of the organization. New Relic's RUM gave us:&lt;/p&gt;
&lt;p&gt;p75 and p95 page-load times segmented by route&lt;br&gt;
JavaScript error rates per browser/version&lt;br&gt;
API call latency from the user's perspective, not the server's&lt;/p&gt;
&lt;p&gt;The thing that's easy to miss: server-side metrics lie about the user experience. A 50ms backend response can land in front of a member 800ms later if you've got render-blocking scripts or oversized bundles. Measure from the browser or you don't know.&lt;br&gt;
Privacy compliance: Osano and the cookie banner question&lt;br&gt;
Membership organizations sit in an interesting spot for privacy: members have given you contact information and consented to communication, but tracking them across the portal is a separate consent. Osano handles the consent UI and gates which scripts can fire based on user choice.&lt;br&gt;
The implementation lesson: don't load Google Analytics, Google Tag Manager, or any tracker before consent. Wire them into the consent callback. It's tempting to &quot;load and let Osano block them&quot; — but that's not actually compliant in most jurisdictions, and it leaks data before the user has chosen.&lt;br&gt;
Delivery via CloudFront&lt;br&gt;
The build artifacts ship to S3 and serve through CloudFront. The CDN configuration that actually mattered:&lt;/p&gt;
&lt;p&gt;Aggressive caching on hashed JS/CSS bundles (immutable, cache forever)&lt;br&gt;
Short cache on the HTML shell (so deployments take effect quickly)&lt;br&gt;
Custom error pages so 404s/500s don't look like an AWS outage&lt;br&gt;
HTTP/2 and Brotli compression enabled (default on CloudFront now, but worth confirming)&lt;/p&gt;
&lt;p&gt;What I'd do differently&lt;/p&gt;
&lt;p&gt;More server-side rendering for SEO-relevant pages. Member dashboards don't need it, but the marketing-adjacent surfaces did.&lt;br&gt;
A clearer separation between member and admin UI. Different access patterns, different performance needs, different bundles.&lt;br&gt;
Earlier investment in component testing. Member portals get touched by support requests constantly; regressions in profile editing or benefit display are very visible. Tests pay for themselves quickly here.&lt;/p&gt;
&lt;p&gt;Takeaways&lt;br&gt;
If you're building a member portal:&lt;/p&gt;
&lt;p&gt;Centralize the API client; don't scatter auth and retry logic through components&lt;br&gt;
Cache entitlements but invalidate them on real events, not on a fixed schedule&lt;br&gt;
Use real-user monitoring from day one; backend metrics lie&lt;br&gt;
Wire privacy compliance into your script loading, not on top of it&lt;br&gt;
Treat the member dashboard like a product, not a page&lt;/p&gt;
&lt;p&gt;Happy to dig into any piece in the comments.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/18309/building-a-member-portal-in-vue-js-lessons-from-a-professional-association-project</guid>
<pubDate>Tue, 19 May 2026 11:30:26 +0000</pubDate>
</item>
<item>
<title>Currently Working on a Full-Stack Social Networking Platform</title>
<link>https://coderlegion.com/14916/currently-working-on-a-full-stack-social-networking-platform</link>
<description>&lt;p&gt;Currently Working on a Full-Stack Social Networking Platform&lt;/p&gt;
&lt;p&gt;As part of my Web Development Internship at &lt;strong&gt;ARCH Technologies&lt;/strong&gt;, I am currently working on &lt;strong&gt;Task 4 — a Social Networking Platform&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This project is focused on building a real-world application where users can create profiles, share posts, interact through likes and comments and connect with others — similar to professional platforms like LinkedIn.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4676515153814781578&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; Key Features:&lt;/strong&gt;&lt;br&gt;
• User Authentication with Email Verification&lt;br&gt;
• Profile Management&lt;br&gt;
• Posts, Likes &amp;amp; Comments&lt;br&gt;
• Friend/Connection Requests&lt;br&gt;
• Real-Time Notifications (WebSockets)&lt;br&gt;
• Privacy Controls &amp;amp; Multimedia Sharing&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;️ Tech Stack:&lt;/strong&gt;&lt;br&gt;
Next.js • Node.js • Express • MongoDB • Socket.IO • Tailwind CSS&lt;/p&gt;
&lt;p&gt;This project is helping me dive deeper into full-stack development and real-time systems while building something scalable and practical.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; GitHub Repo:&lt;/strong&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/YasirAwan4831/arch-tech-task4-social-platform&quot;&gt;https://github.com/YasirAwan4831/arch-tech-task4-social-platform&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;More updates coming soon as I continue building &lt;/p&gt;
&lt;p&gt;&lt;em&gt;#WebDevelopment #FullStack #JavaScript #Nextjs #MongoDB #SocketIO #Internship #Projects #Learning #Internship #Projects #Learning #MuhammadYasir #YasirTech #YasirAwan&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/14916/currently-working-on-a-full-stack-social-networking-platform</guid>
<pubDate>Wed, 15 Apr 2026 18:43:32 +0000</pubDate>
</item>
<item>
<title>Title: Building LUMEN: A High-Contrast, AI-Powered Archival Network with Next.js &amp; Supabase</title>
<link>https://coderlegion.com/14901/title-building-lumen-a-high-contrast-ai-powered-archival-network-with-next-js-supabase</link>
<description>&lt;h3 id=&quot;intro&quot;&gt;Intro&lt;/h3&gt;
&lt;p&gt;I've always been obsessed with minimalist design—the kind that gets out of the way and lets the content breathe. Most blogging platforms today feel like social media: noisy, colorful, and distracting.&lt;/p&gt;
&lt;p&gt;So, I built &lt;strong&gt;LUMEN&lt;/strong&gt;. An archival publishing network where thoughts are preserved in a strict monochrome &quot;Clean Canvas.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://lumen-archive.vercel.app/&quot;&gt;https://lumen-archive.vercel.app/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Shyamkano/LUMEN&quot;&gt;https://github.com/Shyamkano/LUMEN&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-architecture&quot;&gt;The Architecture&lt;/h3&gt;
&lt;p&gt;To keep the site fast and scalable, I went with a modern full-stack approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Framework:&lt;/strong&gt; Next.js 16 (App Router) using the latest Turbopack for lightning-fast development.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database &amp;amp; Auth:&lt;/strong&gt; Supabase (PostgreSQL). I leveraged Row Level Security (RLS) heavily to ensure user data is private and secure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Styling:&lt;/strong&gt; Tailwind CSS v4 + Vanilla CSS for that crisp, brutalist look.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Engine:&lt;/strong&gt; Mistral AI API for the &quot;Editorial Co-pilot&quot; which helps writers refine their work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rich Text:&lt;/strong&gt; TipTap for a seamless, distraction-free writing experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;section&quot;&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2tv5th8a2y63ueynd3aj.png&quot; alt=&quot;Image description&quot;&gt;What makes LUMEN different?&lt;/p&gt;
&lt;h4 id=&quot;1-the-multi-format-feed&quot;&gt;1. The Multi-Format Feed&lt;/h4&gt;
&lt;p&gt;Unlike standard blogs, LUMEN handles four distinct types of content:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Essays:&lt;/strong&gt; Full-length long-form writing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Micro-logs:&lt;/strong&gt; Thoughts under 500 characters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Gists:&lt;/strong&gt; Shared snippets with full syntax highlighting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio Chronicles:&lt;/strong&gt; Voice logs with an integrated audio player.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;2-the-ai-editorial-assistant&quot;&gt;2. The AI Editorial Assistant&lt;/h4&gt;
&lt;p&gt;I integrated a custom AI assistant that does more than just &quot;chat.&quot; It can analyze your writing, suggest relevant tags, fix grammar, and even help you continue a narrative—all without leaving the editor.&lt;/p&gt;
&lt;h4 id=&quot;3-radical-privacy-anonymous-identities-&quot;&gt;3. Radical Privacy (Anonymous Identities)&lt;/h4&gt;
&lt;p&gt;LUMEN allows users to generate &quot;Anonymous Identities.&quot; These are temporary aliases that let you publish a &quot;Signal&quot; (post) without it being traced back to your public profile, perfect for whistleblowing or raw, unedited thoughts.&lt;/p&gt;
&lt;h3 id=&quot;what-s-next-&quot;&gt;What's Next?&lt;/h3&gt;
&lt;p&gt;LUMEN is open-source. I’m planning to add:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[ ] RSS Feed synchronization.&lt;/li&gt;
&lt;li&gt;[ ] End-to-end encrypted private drafts.&lt;/li&gt;
&lt;li&gt;[ ] Advanced full-text search using Postgres &lt;code&gt;tsvector&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'd love to hear your thoughts on the monochrome design. Is it too minimal, or just right?&lt;/p&gt;
&lt;p&gt;Let's discuss in the comments below! &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; &lt;code&gt;#showdev&lt;/code&gt;, &lt;code&gt;#webdev&lt;/code&gt;, &lt;code&gt;#nextjs&lt;/code&gt;, &lt;code&gt;#supabase&lt;/code&gt;. &lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/14901/title-building-lumen-a-high-contrast-ai-powered-archival-network-with-next-js-supabase</guid>
<pubDate>Wed, 15 Apr 2026 15:52:54 +0000</pubDate>
</item>
<item>
<title>Engineering Real-Time Delivery Tracking That Increased Checkout Conversions by 20%</title>
<link>https://coderlegion.com/14376/engineering-real-time-delivery-tracking-that-increased-checkout-conversions-by-20</link>
<description>&lt;p&gt;In e-commerce and on-demand delivery, the moment a user clicks &quot;Place Order&quot; begins an anxiety cycle. Where is my order? When will it arrive? This uncertainty kills conversions.&lt;/p&gt;
&lt;p&gt;Between November 2020 and July 2021, I worked as a Full-Stack Developer at Viaduct, where I engineered a real-time delivery tracking system for an on-demand platform serving 5,000+ active users. The platform connected customers with local vendors for same-day delivery. Before I joined, users were abandoning carts and cancelling orders at alarming rates because they had zero visibility into delivery status.&lt;/p&gt;
&lt;p&gt;This article details how I designed and built the tracking system — Google Maps integration, WebSocket-powered live updates, a Vue.js reactive interface, and the Laravel backend tying it together. The result: a 20% increase in checkout conversions.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-problem-delivery-opacity-was-killing-revenue&quot;&gt;The Problem: Delivery Opacity Was Killing Revenue&lt;/h3&gt;
&lt;p&gt;When I joined Viaduct, the delivery platform was functional but opaque. Users placed orders, received a confirmation email, and waited. The only updates were manual — a dispatcher marked orders &quot;out for delivery&quot; when a driver departed and &quot;delivered&quot; when reported back.&lt;/p&gt;
&lt;p&gt;The consequences were measurable:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cart abandonment:&lt;/strong&gt; 32% of users abandoned at checkout. Exit surveys showed the top reason was &quot;uncertain delivery time.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Post-order cancellations:&lt;/strong&gt; 15% of completed checkouts were cancelled within 30 minutes, most citing &quot;no delivery updates.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Support overload:&lt;/strong&gt; 200+ daily calls asking &quot;where is my order?&quot; — each averaging 4 minutes, consuming 13 person-hours daily.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Driver accountability gaps:&lt;/strong&gt; Without GPS tracking, there was no way to verify delivery times, identify route inefficiencies, or resolve disputes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;my-role-full-stack-architect-of-the-tracking-system&quot;&gt;My Role: Full-Stack Architect of the Tracking System&lt;/h3&gt;
&lt;p&gt;I designed and built the entire real-time tracking system end-to-end: the Laravel backend infrastructure, Google Maps API integration, the WebSocket communication layer, and the Vue.js frontend tracking interface. I owned it from initial technical design through production deployment and post-launch optimisation.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;technical-deep-dive-building-the-real-time-tracking-infrastructure&quot;&gt;Technical Deep Dive: Building the Real-Time Tracking Infrastructure&lt;/h3&gt;
&lt;h4 id=&quot;1-driver-location-collection-architecture&quot;&gt;1. Driver Location Collection Architecture&lt;/h4&gt;
&lt;p&gt;The foundation of real-time tracking is reliable location data. I built a location reporting service on drivers' devices, transmitting GPS coordinates at configurable intervals.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;class DriverLocationController extends Controller
{
    public function updateLocation(UpdateLocationRequest $request): JsonResponse
    {
        $driver = $request-&amp;gt;user();
        $validated = $request-&amp;gt;validated();

        $location = DriverLocation::create([
            'driver_id' =&amp;gt; $driver-&amp;gt;id,
            'latitude' =&amp;gt; $validated['latitude'],
            'longitude' =&amp;gt; $validated['longitude'],
            'accuracy' =&amp;gt; $validated['accuracy'],
            'speed' =&amp;gt; $validated['speed'] ?? null,
            'heading' =&amp;gt; $validated['heading'] ?? null,
            'recorded_at' =&amp;gt; Carbon::createFromTimestamp($validated['timestamp']),
        ]);

        if ($activeDelivery = $driver-&amp;gt;activeDelivery) {
            $this-&amp;gt;broadcastLocationUpdate($activeDelivery, $location);
            $this-&amp;gt;updateEstimatedArrival($activeDelivery, $location);
        }

        return response()-&amp;gt;json(['status' =&amp;gt; 'recorded'], 200);
    }

    private function broadcastLocationUpdate(Delivery $delivery, DriverLocation $location): void
    {
        Redis::publish(&quot;delivery:{$delivery-&amp;gt;id}:location&quot;, json_encode([
            'delivery_id' =&amp;gt; $delivery-&amp;gt;id,
            'driver' =&amp;gt; [
                'latitude' =&amp;gt; $location-&amp;gt;latitude,
                'longitude' =&amp;gt; $location-&amp;gt;longitude,
                'heading' =&amp;gt; $location-&amp;gt;heading,
            ],
            'timestamp' =&amp;gt; $location-&amp;gt;recorded_at-&amp;gt;toIso8601String(),
        ]));
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Location updates published to Redis channels, bridging the Laravel backend and the WebSocket server. This decoupled location ingestion (high-frequency HTTP POSTs from drivers) from location broadcasting (persistent WebSocket connections to customers), allowing each to scale independently.&lt;/p&gt;
&lt;h4 id=&quot;2-google-maps-integration-for-eta-calculation&quot;&gt;2. Google Maps Integration for ETA Calculation&lt;/h4&gt;
&lt;p&gt;Accurate ETAs were critical. I integrated the Google Maps Directions API with live traffic data:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;class GoogleMapsService
{
    public static function getDirections(array $origin, array $destination): ?DirectionsResult
    {
        $response = Http::get('https://maps.googleapis.com/maps/api/directions/json', [
            'origin' =&amp;gt; &quot;{$origin['lat']},{$origin['lng']}&quot;,
            'destination' =&amp;gt; &quot;{$destination['lat']},{$destination['lng']}&quot;,
            'mode' =&amp;gt; 'driving',
            'departure_time' =&amp;gt; 'now',
            'traffic_model' =&amp;gt; 'best_guess',
            'key' =&amp;gt; config('services.google_maps.api_key'),
        ]);

        if (!$response-&amp;gt;successful() || $response-&amp;gt;json('status') !== 'OK') {
            return null;
        }

        $leg = $response-&amp;gt;json('routes.0.legs.0');
        return new DirectionsResult(
            durationMinutes: (int) ceil($leg['duration_in_traffic']['value'] / 60),
            distanceKm: round($leg['distance']['value'] / 1000, 1),
            polyline: $response-&amp;gt;json('routes.0.overview_polyline.points'),
        );
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using &lt;code&gt;departure_time=now&lt;/code&gt; and &lt;code&gt;traffic_model=best_guess&lt;/code&gt; ensured ETAs reflected live traffic — during rush hours, static estimates might show 10 minutes while actual time was 25. However, calling Google Maps on every location update (every 10 seconds per driver) would be prohibitively expensive. I implemented intelligent throttling using Haversine distance:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;class ETAService
{
    private const ETA_CACHE_TTL = 60;
    private const MIN_DISTANCE_FOR_RECALC = 0.2; // km

    public function shouldRecalculateETA(Delivery $delivery, DriverLocation $newLocation): bool
    {
        if (!$delivery-&amp;gt;eta_updated_at) return true;
        if (now()-&amp;gt;diffInSeconds($delivery-&amp;gt;eta_updated_at) &amp;lt; self::ETA_CACHE_TTL) return false;

        $lastCalcLocation = Cache::get(&quot;eta_calc_location:{$delivery-&amp;gt;id}&quot;);
        if (!$lastCalcLocation) return true;

        return $this-&amp;gt;haversineDistance(
            $lastCalcLocation['lat'], $lastCalcLocation['lng'],
            $newLocation-&amp;gt;latitude, $newLocation-&amp;gt;longitude
        ) &amp;gt;= self::MIN_DISTANCE_FOR_RECALC;
    }

    private function haversineDistance(float $lat1, float $lon1, float $lat2, float $lon2): float
    {
        $dLat = deg2rad($lat2 - $lat1);
        $dLon = deg2rad($lon2 - $lon1);
        $a = sin($dLat/2)**2 + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2)**2;
        return 6371 * 2 * atan2(sqrt($a), sqrt(1 - $a));
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ETAs were recalculated only when the driver moved 200m+ and 60+ seconds had elapsed, reducing Google Maps API calls by ~80%.&lt;/p&gt;
&lt;h4 id=&quot;3-websocket-server-for-live-customer-updates&quot;&gt;3. WebSocket Server for Live Customer Updates&lt;/h4&gt;
&lt;p&gt;The real-time frontend was powered by a Node.js WebSocket server subscribed to Redis channels:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;const wss = new WebSocket.Server({ port: 6001 });
const subscriber = new Redis(process.env.REDIS_URL);
const deliverySubscriptions = new Map();

wss.on('connection', (ws) =&amp;gt; {
  ws.on('message', (raw) =&amp;gt; {
    const msg = JSON.parse(raw);
    if (msg.type === 'subscribe_delivery') {
      if (!deliverySubscriptions.has(msg.deliveryId)) {
        deliverySubscriptions.set(msg.deliveryId, new Set());
        subscriber.subscribe(
          `delivery:${msg.deliveryId}:location`,
          `delivery:${msg.deliveryId}:eta`,
          `delivery:${msg.deliveryId}:status`
        );
      }
      deliverySubscriptions.get(msg.deliveryId).add(ws);
    }
  });

  ws.on('close', () =&amp;gt; {
    if (ws.deliveryId) {
      const subs = deliverySubscriptions.get(ws.deliveryId);
      if (subs) { subs.delete(ws); if (subs.size === 0) deliverySubscriptions.delete(ws.deliveryId); }
    }
  });
});

subscriber.on('message', (channel, message) =&amp;gt; {
  const [, deliveryId, eventType] = channel.split(':');
  const subs = deliverySubscriptions.get(deliveryId);
  if (!subs) return;
  const payload = JSON.stringify({ type: `delivery_${eventType}`, data: JSON.parse(message) });
  for (const ws of subs) { if (ws.readyState === WebSocket.OPEN) ws.send(payload); }
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The server was deliberately stateless — it bridged Redis pub/sub to WebSocket connections with no business logic, making it horizontally scalable.&lt;/p&gt;
&lt;h4 id=&quot;4-vue-js-real-time-tracking-interface&quot;&gt;4. Vue.js Real-Time Tracking Interface&lt;/h4&gt;
&lt;p&gt;The customer-facing tracking page used Vue.js Composition API. The core was a WebSocket composable with exponential backoff reconnection:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;export function useDeliveryWebSocket(deliveryId) {
  const driverLocation = ref(null);
  const eta = ref(null);
  const deliveryStatus = ref('confirmed');
  let ws = null, reconnectAttempts = 0;

  function connect() {
    ws = new WebSocket(process.env.VUE_APP_WS_URL);
    ws.onopen = () =&amp;gt; {
      reconnectAttempts = 0;
      ws.send(JSON.stringify({ type: 'subscribe_delivery', deliveryId }));
    };
    ws.onmessage = ({ data }) =&amp;gt; {
      const msg = JSON.parse(data);
      if (msg.type === 'delivery_location') driverLocation.value = msg.data.driver;
      else if (msg.type === 'delivery_eta') eta.value = msg.data.eta_minutes;
      else if (msg.type === 'delivery_status') deliveryStatus.value = msg.data.status;
    };
    ws.onclose = () =&amp;gt; {
      if (reconnectAttempts &amp;lt; 10)
        setTimeout(connect, Math.min(1000 * 2 ** reconnectAttempts++, 30000));
    };
  }
  return { driverLocation, eta, deliveryStatus, connect, disconnect: () =&amp;gt; ws?.close() };
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The map component initialised Google Maps, rendered destination and driver markers, and animated the driver marker between positions using cubic easing. Without animation, the marker would &quot;teleport&quot; every 10 seconds — with smooth interpolation, users perceived continuous movement, dramatically improving perceived quality.&lt;/p&gt;
&lt;h4 id=&quot;5-delivery-status-lifecycle-and-performance&quot;&gt;5. Delivery Status Lifecycle and Performance&lt;/h4&gt;
&lt;p&gt;Every status transition published to Redis for real-time updates, sent push notifications, and recorded metrics:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;class Delivery extends Model
{
    public function markPickedUp(): void
    {
        $this-&amp;gt;update(['status' =&amp;gt; 'picked_up', 'picked_up_at' =&amp;gt; now()]);
        Redis::publish(&quot;delivery:{$this-&amp;gt;id}:status&quot;, json_encode([
            'delivery_id' =&amp;gt; $this-&amp;gt;id, 'status' =&amp;gt; 'picked_up',
            'driver' =&amp;gt; ['name' =&amp;gt; $this-&amp;gt;driver-&amp;gt;name, 'phone' =&amp;gt; $this-&amp;gt;driver-&amp;gt;phone],
        ]));
        $this-&amp;gt;order-&amp;gt;customer-&amp;gt;notify(new DeliveryPickedUpNotification($this));
    }

    public function markDelivered(): void
    {
        $this-&amp;gt;update(['status' =&amp;gt; 'delivered', 'delivered_at' =&amp;gt; now()]);
        Redis::publish(&quot;delivery:{$this-&amp;gt;id}:status&quot;, json_encode([
            'delivery_id' =&amp;gt; $this-&amp;gt;id, 'status' =&amp;gt; 'delivered',
        ]));
        $this-&amp;gt;order-&amp;gt;customer-&amp;gt;notify(new DeliveryCompletedNotification($this));
        DeliveryMetric::create([
            'delivery_id' =&amp;gt; $this-&amp;gt;id, 'driver_id' =&amp;gt; $this-&amp;gt;driver_id,
            'estimated_minutes' =&amp;gt; $this-&amp;gt;estimated_arrival_minutes,
            'actual_minutes' =&amp;gt; $this-&amp;gt;picked_up_at?-&amp;gt;diffInMinutes($this-&amp;gt;delivered_at),
        ]);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;DeliveryMetric&lt;/code&gt; model enabled comparing estimated vs. actual delivery times, identifying underperforming drivers and slow routes.&lt;/p&gt;
&lt;p&gt;For performance at scale, I buffered location writes in Redis and flushed to PostgreSQL in batches every 30 seconds, reducing database write load by 90% while maintaining real-time delivery through the pub/sub layer. Vendor discovery pages used PostGIS spatial queries (&lt;code&gt;ST_DWithin&lt;/code&gt;, &lt;code&gt;ST_Distance&lt;/code&gt;) with aggressive caching, returning results in under 50ms across thousands of records.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-results-measurable-business-impact&quot;&gt;The Results: Measurable Business Impact&lt;/h3&gt;
&lt;p&gt;The system launched after eight weeks of development. Results over a 60-day observation period:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Metric &lt;/th&gt;&lt;th&gt;Before &lt;/th&gt;&lt;th&gt;After &lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Checkout conversion rate &lt;/td&gt;&lt;td&gt;68% &lt;/td&gt;&lt;td&gt;88% &lt;/td&gt;&lt;td&gt;&lt;strong&gt;+20 percentage points&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Post-order cancellation rate &lt;/td&gt;&lt;td&gt;15% &lt;/td&gt;&lt;td&gt;4% &lt;/td&gt;&lt;td&gt;&lt;strong&gt;73% reduction&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&quot;Where is my order?&quot; support calls &lt;/td&gt;&lt;td&gt;200+/day &lt;/td&gt;&lt;td&gt;~35/day &lt;/td&gt;&lt;td&gt;&lt;strong&gt;82% reduction&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Customer satisfaction score &lt;/td&gt;&lt;td&gt;3.4/5 &lt;/td&gt;&lt;td&gt;4.3/5 &lt;/td&gt;&lt;td&gt;&lt;strong&gt;26% improvement&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Active platform users &lt;/td&gt;&lt;td&gt;~3,200 &lt;/td&gt;&lt;td&gt;5,000+ &lt;/td&gt;&lt;td&gt;&lt;strong&gt;56% growth&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Tracking page views per order &lt;/td&gt;&lt;td&gt;0 &lt;/td&gt;&lt;td&gt;4.2 &lt;/td&gt;&lt;td&gt;New engagement channel&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The support call reduction alone freed 11 person-hours daily — redirected to proactive customer outreach and vendor management.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;technical-lessons&quot;&gt;Technical Lessons&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Decouple ingestion from delivery.&lt;/strong&gt; Location collection (Laravel) and broadcasting (Node.js WebSocket) had different performance profiles. Separate services connected by Redis allowed independent scaling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Animate transitions, don't teleport.&lt;/strong&gt; Users perceive smooth movement as real-time tracking and position jumps as a broken system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Throttle expensive API calls intelligently.&lt;/strong&gt; The Haversine check before ETA recalculation saved thousands of unnecessary Google Maps calls daily.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Buffer writes, stream reads.&lt;/strong&gt; Batch-writing to the database while streaming through Redis provided both persistence and live performance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Measure business metrics.&lt;/strong&gt; WebSocket latency matters, but checkout conversion rate proved the system's value.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/14376/engineering-real-time-delivery-tracking-that-increased-checkout-conversions-by-20</guid>
<pubDate>Thu, 09 Apr 2026 22:37:20 +0000</pubDate>
</item>
<item>
<title>I Built A Full-Stack App in 7 Days: Here’s Day 1</title>
<link>https://coderlegion.com/14136/i-built-a-full-stack-app-in-7-days-heres-day-1</link>
<description>&lt;p&gt;I decided to challenge myself in a way that I have been considering for a while now. Build a full-stack application in only 7 days, completely from scratch, to completely real and usable. Not just a tutorial project, a clone of something that already exists, but something that I have designed, created, and shipped by myself.&lt;/p&gt;
&lt;p&gt;There’s something about coding projects like these that make them feel almost deceptively simple in the beginning. You think the hard part will be writing the code, but in reality, the hardest part is normally finishing them. Most people don’t fail because they can’t write the code… they fail because they never fully complete anything. They always stop somewhere between ‘idea’ and ‘almost done’.&lt;/p&gt;
&lt;p&gt;So, I wanted to remove that entirely. I stuck to no over-planning, no perfect architecture diagrams, and no time wasted endlessly researching the ‘best possible’ stack. Just 7 days of building, documenting and continuing on forwards no matter what happens. This is Day 1.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Day 1 started almost exactly like you would expect. I was staring at my laptop’s blank screen, trying to decide what I was going to build. This part is always more difficult than people admit. Not because it is necessarily difficult to think of ideas, but because it feels like you have to have the perfect idea before you even begin.&lt;/p&gt;
&lt;p&gt;However, I forced myself to follow one simple rule: if I couldn’t explain the project in one sentence, and why I wanted to build it in one more, then I wasn’t allowed to build it yet. That alone removed a lot of the noise. After cutting everything down, I ended up with a relatively simple direction: build a full-stack app that is actually useful, is small enough to build in one week, but also flexible enough that I can expand it later.&lt;/p&gt;
&lt;p&gt;It was nothing revolutionary, just something real that I could actually build and improve on. So, once I had that clarity, I stopped planning and started building almost immediately.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;For the first day, I didn’t focus on building features. I focused instead on setting up my foundations properly so I wouldn’t regret it later on down the line.&lt;/p&gt;
&lt;p&gt;I chose a stack that prioritised both speed and simplicity: Next.js for both the frontend and backend, Supabase for authentication and database, and TailwindCSS for styling. I decided not to waste time deciding about tools; I just picked what let me move quickly.&lt;/p&gt;
&lt;p&gt;I created the project, set up the basic structure, connected Supabase, and got the environment variables working. It doesn’t sound like a lot on paper, but this is the stage, when developing something new, that everything either goes smoothly or starts to become a mess later on.&lt;/p&gt;
&lt;p&gt;There always happens to be a moment during the setup where things feel slightly messy and fragile, like one wrong configuration could break everything. But, after a bit of trial and error, I got it running cleanly.&lt;/p&gt;
&lt;p&gt;That moment when the app finally boots without errors is always underrated. It is the point, where for the first time, the project stops being an idea, and begins to transform into something real.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;My biggest win on Day 1 wasn’t building a feature, or writing some complex logic. It was simply getting everything to connect properly. The front-end loaded correctly. The backend responded. The connection to the database worked. There were no errors flooding my terminal.&lt;/p&gt;
&lt;p&gt;It sounds basic, but these small confirmations mattered more than anything else early on to me. They were the things that gave me momentum. Without that, each of the next steps I took would have felt uncertain. Instead, everything felt possible.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Of course, my Day 1 wasn’t completely smooth. Even on Day 1, I ran into the usual setup issues: Environment variables wouldn’t load properly, there was some confusion over my Supabase setup, and some smaller decisions about folder structures that, looking back, I probably spent way too long thinking about. Nothing too major, just enough to slow things down only a little.&lt;/p&gt;
&lt;p&gt;What I found most interesting was that most of these problems weren’t actually problems related to coding. They were setup problems. And setup problems always feel worse than they actually are, because they block everything else from moving forwards. Once I had that realisation, it became a lot easier to stay calm and focus on fixing things one by one, instead of overreacting and panicking.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Looking back at the first day, the main lesson I took from it wasn’t technical at all. It was all about my speed and momentum.&lt;/p&gt;
&lt;p&gt;It reminded me that planning is only useful up to a certain point. After that, it becomes a delaying tactic cleverly disguised as productivity. Progress only really starts when you begin to build something that exists outside your head.&lt;/p&gt;
&lt;p&gt;It also reinforced something that I have noticed before: that getting something running, even if it is in its most basic form, is far more important than making it perfect. Perfection can come later, but functionality has to come first.&lt;/p&gt;
&lt;p&gt;Most importantly, it showed me that momentum is everything. Once the project is alive, even in a basic form, it becomes much easier to continue.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Day 2 is where things will start to get interesting.&lt;/p&gt;
&lt;p&gt;Now that the foundation is in place, I will start to build actual features: real UI components, authentication flows and the first real pieces of functionality that turn my project from just a setup into something users could actually interact with.&lt;/p&gt;
&lt;p&gt;Right now, I have the scaffolding. By Day 2, it starts to become a product.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If you enjoyed this post, make sure to subscribe so you can follow everything I’m building in real time.&lt;/p&gt;
&lt;p&gt;Also, check out My SubStack, where I am turning this into a 7 part weekly series.&lt;/p&gt;
&lt;p&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://lucybatten.substack.com&quot;&gt;lucybatten.substack.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you have any questions, connect with me on LinkedIn:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://linkedin.com/in/lucybatten&quot;&gt;lucybatten&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to see how ideas turn into real apps (and what ends up happening along the way), check out the rest of the posts in this series.&lt;/p&gt;
&lt;p&gt;More builds, more problems, and more fixes… coming every week.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/14136/i-built-a-full-stack-app-in-7-days-heres-day-1</guid>
<pubDate>Tue, 07 Apr 2026 07:02:30 +0000</pubDate>
</item>
<item>
<title>How to Become a Web Developer in 2026: Ultimate Guide to Skills, Tools &amp; Career Growth</title>
<link>https://coderlegion.com/10346/how-to-become-a-web-developer-in-2026-ultimate-guide-to-skills-tools-career-growth</link>
<description>&lt;p&gt;The world of web development is evolving rapidly, and 2026 promises to be an exciting year for aspiring developers. If you want to build a successful career in web development, it’s not just about knowing HTML, CSS, and JavaScript anymore. Today, modern web developers need a mix of frontend and backend skills, an understanding of AI-assisted development, and the ability to create real-world projects that showcase their expertise.&lt;/p&gt;
&lt;p&gt;This comprehensive guide walks you through everything you need to know: starting from the fundamentals, diving into popular frameworks like React and Next.js, exploring backend technologies such as Node.js, Django, or FastAPI, and managing databases like MongoDB, MySQL, or PostgreSQL. You’ll also learn how to deploy projects to cloud &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.techlog.it.com/blogs/technology/best-chrome-extensions-for-web-developers&quot;&gt;platforms&lt;/a&gt;, implement CI/CD pipelines, and maintain code quality with tools like ESLint and Prettier.&lt;/p&gt;
&lt;p&gt;AI is reshaping development workflows, from coding assistance with ChatGPT or GitHub Copilot to automated testing and design tools. By learning to leverage these technologies, you’ll work smarter, build faster, and stay ahead of the competition.&lt;/p&gt;
&lt;p&gt;We’ll also guide you on building projects, creating a strong portfolio, contributing to open-source, and networking in developer communities. Whether you aim to land your first remote job, freelance clients, or grow into a full-stack developer, this roadmap will equip you with the knowledge, skills, and confidence to thrive as a web developer in 2026 and beyond.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/10346/how-to-become-a-web-developer-in-2026-ultimate-guide-to-skills-tools-career-growth</guid>
<pubDate>Fri, 23 Jan 2026 10:48:40 +0000</pubDate>
</item>
<item>
<title>The Journey of Enoch Philip Dibal: Building with Code and Purpose</title>
<link>https://coderlegion.com/7100/the-journey-of-enoch-philip-dibal-building-with-code-and-purpose</link>
<description>&lt;p&gt;Enoch Philip Dibal is a software engineer and writer. His work shows patience, focus, and a drive to learn. He builds for the web, writes technical content, and studies computer engineering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Early focus on learning&lt;/strong&gt;&lt;br&gt;
From the start, Enoch made learning his priority. He took each tool and framework step by step. JavaScript, React, Node, and databases became his toolkit. Instead of rushing, he mastered the basics before moving forward.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Building as a way of thinking&lt;/strong&gt;&lt;br&gt;
For Enoch, building is not only about output. It is a way to think clearly. By turning ideas into working projects, he improves his mind and his craft. Each project is proof of consistency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Balancing software and engineering study&lt;/strong&gt;&lt;br&gt;
While studying computer engineering, he applies theory in practice. Academic work builds his foundation in systems and hardware. Software projects give him speed in execution. The two sides make his path stronger.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Writing as part of growth&lt;/strong&gt;&lt;br&gt;
Enoch does not stop at coding. He also writes. His writing is direct, simple, and structured. By writing technical posts and documentation, he helps others learn while reinforcing his own knowledge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Principles he works by&lt;/strong&gt;&lt;br&gt;
Learn fast but with depth&lt;br&gt;
Keep focus on clarity&lt;br&gt;
Write simple and functional code&lt;br&gt;
Share knowledge through writing&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Code is a tool. The goal is to solve problems with accuracy and&lt;br&gt;
patience.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recent projects&lt;/strong&gt;&lt;br&gt;
Enoch has worked on full-stack applications with authentication, dashboards, and APIs. He also experiments with design and user experience. Each project reflects careful structure and focus on usability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Challenges and lessons&lt;/strong&gt;&lt;br&gt;
Like all developers, he faced errors, failed builds, and slow progress at times. Instead of quitting, he treated each obstacle as part of the path. Debugging improved his patience. Deadlines taught him planning. Team work improved his communication.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vision for the future&lt;/strong&gt;&lt;br&gt;
Enoch’s vision is not limited to personal success. He aims to mentor, to teach, and to support others entering the field. He believes consistent learning and clear writing create long-term impact.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Closing note&lt;/strong&gt;&lt;br&gt;
Enoch Philip Dibal is still in motion. His story is not complete. Each new line of code, each article, each project adds to the journey. What stands out is his clear focus: learn, build, share.&lt;/p&gt;
</description>
<category>Resume Writing</category>
<guid isPermaLink="true">https://coderlegion.com/7100/the-journey-of-enoch-philip-dibal-building-with-code-and-purpose</guid>
<pubDate>Tue, 25 Nov 2025 23:32:15 +0000</pubDate>
</item>
<item>
<title>StackDAG</title>
<link>https://coderlegion.com/4761/stackdag</link>
<description>&lt;p&gt;It’s been &lt;strong&gt;three weeks&lt;/strong&gt; since StackDAG launched into public beta, and the community keeps growing. Thanks to everyone who’s been building stacks, sharing ideas, and making this project better every week.  &lt;/p&gt;
&lt;p&gt;StackDAG is a platform for building and sharing application stacks using &lt;strong&gt;Directed Acyclic Graphs (DAGs)&lt;/strong&gt;. You can model anything from a traditional PERN stack (React, Express, Node.js, PostgreSQL) to a completely custom workflow using a flexible, visual DAG editor.&lt;/p&gt;
&lt;h3 id=&quot;here-s-what-s-new-in-week-3-&quot;&gt;Here’s what’s new in Week 3:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New Components&lt;/strong&gt;: Several new component nodes have been added, including Google Maps. Keep the suggestions coming, as many of these additions are driven directly by feedback from the community. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rww74ppza8vl25cvfcz7.png&quot; alt=&quot;Google Maps&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Security Fixes&lt;/strong&gt;: A few more issues were patched this week. As always, if you notice anything unusual or potentially vulnerable, please reach out. Early feedback is incredibly valuable.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual Improvements&lt;/strong&gt;: A handful of visual bugs were fixed, along with small UI tweaks to make StackDAG smoother to use.  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;weekly-challenge-2&quot;&gt;Weekly Challenge 2&lt;/h3&gt;
&lt;p&gt;Submissions are in, and now it’s time to vote! Join the Discord to see the entries, cast your vote, and take part in future challenges: &lt;a rel=&quot;nofollow&quot; href=&quot;https://discord.gg/VqwqHmg5fn&quot;&gt;https://discord.gg/VqwqHmg5fn&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;And a quick community shoutout:&lt;/strong&gt; People are already using StackDAG to plan out their apps and even asking for advice in here. I couldn’t be prouder of how collaborative and supportive this community is becoming.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Join the Beta&lt;/strong&gt;: Start building your first DAG at &lt;a rel=&quot;nofollow&quot; href=&quot;https://stackdag.pages.dev&quot;&gt;https://stackdag.pages.dev&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;During the beta, you’ll get access to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DAG templates to get started fast&lt;br&gt;
&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0t7rsa2kf0rw5p828pzr.gif&quot; alt=&quot;Selecting a DAG template&quot;&gt;&lt;/li&gt;
&lt;li&gt;A broad set of components to build any stack&lt;br&gt;
&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aaz5jsx2t2y174dolixe.gif&quot; alt=&quot;Adding a new component&quot;&gt;&lt;/li&gt;
&lt;li&gt;Sharing and forking tools to collaborate or remix ideas&lt;br&gt;
&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/431l9uk9zb413r15lw7f.gif&quot; alt=&quot;Sharing levels&quot;&gt;&lt;/li&gt;
&lt;li&gt;A feed of trending DAGs from the community&lt;br&gt;
&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1kk64e1xibuo9duerqt.gif&quot; alt=&quot;Forking a DAG&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;During the beta, all accounts get marked as early testers and will receive early access to upcoming premium features.  &lt;/p&gt;
&lt;p&gt;Thanks again for being part of StackDAG’s journey. Let’s make Week 4 even bigger.&lt;/p&gt;
</description>
<category>SaaS</category>
<guid isPermaLink="true">https://coderlegion.com/4761/stackdag</guid>
<pubDate>Sat, 16 Aug 2025 19:43:05 +0000</pubDate>
</item>
<item>
<title>React Native to Microservices</title>
<link>https://coderlegion.com/4223/react-native-to-microservices</link>
<description>&lt;p&gt;In the React Native world we pretty much only worry about calling an endpoint and receiving some data from such endpoint. We are usually blind to all the work that happens in retrieving this data. In this post I am going to trace the api call from when it leaves the device up until the response is received, in a microservices context — naive point of view.&lt;/p&gt;
&lt;p&gt;The api call goes to a domain name server to resolve where this api call should go. If I am in Italy, the api call will go to the nearest load balancer around Italy. This is enabled by having geolocation routing.&lt;/p&gt;
&lt;p&gt;After the nearest load balancer has been identified. The api call is taken to this load balancer. A load balancer makes sure that when too many users are on their beds watching tiktoks the servers are not overloaded with too many requests at once. It distributes the requests in a manageable manner.&lt;/p&gt;
&lt;p&gt;The load balancers can also route the api request to the server that is responsible for processing the request. For example, /videos/1 should go to the videos server instead of the pictures server. The load balancer will then take the /videos/1 request to the videos server.&lt;/p&gt;
&lt;p&gt;Once the api request has arrived at the videos server, this server will also communicate with other microservices, maybe analytics, views count, metadata, related videos, and such. The Synchronous part of the request will return to the react native app, the video data and metadata for example, on the other hand, the asynchronous part, analytics for e.g., usually make use of something called message queues to communicate with the other microservices.&lt;/p&gt;
&lt;p&gt;Message queues ares queues usually read by other microservices, analytics, metadata, recommendations, each can be subscribed to a message queue. Message queues are ideal because if the service goes down, the message queue will hold the message until the service comes back up and acknowledges the message was processed. This prevent’s losing messages along the way.&lt;/p&gt;
&lt;p&gt;This is a high level overview, there is so much in between these processes; ssl, caching, routing algorithm, message exchange, producer, broker, CAP theorem, rate limiting, and so much more.&lt;/p&gt;
</description>
<category>Full-stack Dev</category>
<guid isPermaLink="true">https://coderlegion.com/4223/react-native-to-microservices</guid>
<pubDate>Tue, 22 Jul 2025 21:14:32 +0000</pubDate>
</item>
<item>
<title>Building a HTTP Server from Scratch: Know the HTTP principles to be a better FS Developer</title>
<link>https://coderlegion.com/3299/building-a-http-server-from-scratch-know-the-http-principles-to-be-a-better-fs-developer</link>
<description>&lt;h3 id=&quot;contents&quot;&gt;Contents&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;##why-build-a-http-server-from-scratch&quot;&gt;Why Build a HTTP server from Scratch?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;#first-the-basics-what-is-an-http-server&quot;&gt;First, the basics. What Is an HTTP Server?&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;#tcp-vs-udp&quot;&gt;TCP vs. UDP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;#key-features-of-my-http-server-typescript--nodejs&quot;&gt;Key features of my HTTP Server (Typescript + Nodejs)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;##what-i-learned&quot;&gt;What I Learned&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;#learning-1-sockets&quot;&gt;Learning 1: Sockets!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;#learning-2-routing-isnt-that-simple&quot;&gt;Learning 2: Routing Isn’t That Simple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;#learning-3-always-try-to-break-your-software&quot;&gt;Learning 3: Always Try to Break Your Software&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;##whats-next&quot;&gt;What’s Next?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;##why-it-matters---meta-learnings&quot;&gt;Why It Matters - Meta Learnings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-build-a-http-server-from-scratch-&quot;&gt;Why Build a HTTP server from Scratch?&lt;/h3&gt;
&lt;p&gt;These days, you can spin up a fully functional server in minutes with the help of modern tools.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why would anyone bother building an HTTP server from scratch using NodeJs and Typescript?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For me, it's an experiment I am running for the next three months: mastering building blocks fundamentals and re training myself on doing deep work.&lt;/p&gt;
&lt;p&gt;There is also a simple truth about working in tech: if I am serious about thriving as a full-stack engineer, I surely need to own the basics, and not just know how to work with abstractions and frameworks that do pretty much everything for you.&lt;/p&gt;
&lt;p&gt;Beyond the technical challenge, there’s the simple satisfaction of building something fun and tangible. There’s unparalleled satisfaction in crafting a tool that serves a real purpose, like delivering a web page that serves an HTML page with images and text, using only the basics.&lt;/p&gt;
&lt;p&gt;It’s a powerful way to deepen your technical skills in a meaningful way while working on something enjoyable.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;first-the-basics-what-is-an-http-server-&quot;&gt;&lt;strong&gt;First, the basics. What Is an HTTP Server?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;At its core, an HTTP server is a program that listens for incoming HTTP requests from clients (like a browser or API consumer), processes those requests, and sends back responses. It uses the &lt;strong&gt;TCP (Transmission Control Protocol)&lt;/strong&gt; to establish a reliable connection, ensuring that data packets arrive in order and intact.&lt;/p&gt;
&lt;h4 id=&quot;tcp-vs-udp&quot;&gt;&lt;strong&gt;TCP vs. UDP&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;I do mountaineering and one analogy came to me to differentiate TCP and UDP protocols.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP:&lt;/strong&gt; Think of climbers on a glacier roped together. Everyone reaches the summit securely and in order. That’s TCP: ensuring that data (climbers) arrive in order and intact.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP:&lt;/strong&gt; UDP are like alpinists climbing individually without ropes. It’s usually faster, but there’s no guarantee everyone gets there. Fast, but less reliable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;key-features-of-my-http-server-typescript-nodejs-&quot;&gt;&lt;strong&gt;Key features of my HTTP Server (Typescript + Nodejs)&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Handles GET and POST Requests:&lt;/strong&gt; Responds with a simple “Hello, World!” for basic requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supports for HTTP/1.1 Protocol:&lt;/strong&gt; Implements the essentials of this widely-used protocol.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serves Static Files:&lt;/strong&gt; Fetches and delivers image files stored in the server’s &lt;code&gt;public/images/&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routing:&lt;/strong&gt; Implements basic routing using &lt;code&gt;if-else&lt;/code&gt; statements to handle different endpoints like &lt;code&gt;/api&lt;/code&gt; or &lt;code&gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Handling:&lt;/strong&gt; Ensures proper responses for malformed requests, like returning &lt;code&gt;400 Bad Request&lt;/code&gt; for parsing errors.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-learned&quot;&gt;What I Learned&lt;/h3&gt;
&lt;h4 id=&quot;learning-1-sockets-&quot;&gt;Learning 1: Sockets!&lt;/h4&gt;
&lt;p&gt;Sockets are how servers and clients talk to each other. Before this project, I knew about sockets the way most of us know about cars: we press the gas pedal, and the car moves. Magic! Now, I’ve seen how there is nothing magical about it, especially when I wrote the &lt;code&gt;createDataHandler&lt;/code&gt; function:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-typescript&quot;&gt;const createDataHandler = (
  socket: net.Socket,
  handleRequest: (rawRequest: string) =&amp;gt; {
    statusCode: number;
    statusMessage: string;
    headers: Record&amp;lt;string, string&amp;gt;;
    body: string | Buffer;
  },
): ((chunk: Buffer) =&amp;gt; void) =&amp;gt; {
  let buffer = '';
  
  return (chunk: Buffer) =&amp;gt; {
    buffer += chunk.toString();
    if (buffer.includes('\r\n\r\n')) {
      const response = handleRequest(buffer);
      if (socket.writable) {
        socket.write(formatHttpResponse(response));
        socket.end();
      } else {
        logger.error('Socket is not writable, skipping response');
      }
    }
  };
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;explanation-of-createdatahandler-function&quot;&gt;Explanation of &lt;code&gt;createDataHandler&lt;/code&gt; Function&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;createDataHandler&lt;/code&gt; is a function that handles incoming TCP data chunks for HTTP requests. It maintains a &lt;strong&gt;buffer&lt;/strong&gt;—a string that accumulates data from incoming chunks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chunk Conversion:&lt;/strong&gt; For each chunk, it converts the binary data into a string and appends it to the buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Header Detection:&lt;/strong&gt; It then checks if the buffer contains &lt;code&gt;\r\n\r\n&lt;/code&gt;, which marks the end of the HTTP headers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processing &amp;amp; Response:&lt;/strong&gt; If it finds the marker, it processes the request and sends a response.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This gave me a clearer view of how HTTP works at the lowest level: every incoming request starts as raw data, and the server has to parse it into something usable. Sockets are the invisible ropes that pull these chunks back and forth, and the &lt;code&gt;createDataHandler&lt;/code&gt; function is the intermediary which makes something sensible of the data.&lt;/p&gt;
&lt;p&gt;We can also appreciate how fragile things are: if the buffer isn’t handled properly—by failing to detect the end of the headers, for example—the server breaks. These are things I've never appreciated when using frameworks.&lt;/p&gt;
&lt;h4 id=&quot;learning-2-routing-isn-t-that-simple&quot;&gt;Learning 2: Routing Isn’t That Simple&lt;/h4&gt;
&lt;p&gt;Manual routing turned out to be more challenging than I expected, especially when it came to handling content types. Frameworks like Express.js make this super easy, but behind the scenes, there’s a lot happening:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Content-Type Handling:&lt;/strong&gt; My server only supported JSON for request bodies, and I had to set the correct MIME type manually for responses. Adding support for more content types, like &lt;code&gt;multipart/form-data&lt;/code&gt; for file uploads or &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt; for form submissions, would require additional parsing logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Headers Management:&lt;/strong&gt; In a basic setup, you’re responsible for setting essential headers like &lt;code&gt;Content-Type&lt;/code&gt; and &lt;code&gt;Content-Length&lt;/code&gt;. Get these values wrong, and the client either won’t understand the response or will hang waiting for more data. This is what happened when my server was not picking up the &lt;code&gt;images/jpeg&lt;/code&gt; datatype.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parsing Body Formats:&lt;/strong&gt; Each content type requires its own logic. For example, JSON bodies need to be parsed into JavaScript objects, while &lt;code&gt;multipart/form-data&lt;/code&gt; requires handling file streams. This complexity grows quickly as you add support for more formats.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Express.js automates most of this. It detects the &lt;code&gt;Content-Type&lt;/code&gt; header, parses the body accordingly, and sets the right MIME type for responses. Doing this manually gave me a deep appreciation for how much work frameworks save.&lt;/p&gt;
&lt;p&gt;While my manual routing works for basic cases, it’s clear that scaling it to handle more complex scenarios would require more effort.&lt;/p&gt;
&lt;h4 id=&quot;learning-3-always-try-to-break-your-software&quot;&gt;Learning 3: Always Try to Break Your Software&lt;/h4&gt;
&lt;p&gt;Software is rarely perfect the first time around. A great way to test my server was to run:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hey -n 1000 -m GET http://localhost:8080/&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&quot;stress-test-outcome&quot;&gt;Stress Test Outcome&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;BOOM.&lt;/strong&gt; The server crashed after 800 requests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;
This command sends 1,000 simultaneous GET requests, simulating real-world stress. It exposed a critical issue: I wasn’t handling socket timeouts properly. My server would hang because it didn’t close idle sockets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt;&lt;br&gt;
To fix this, I chose to close the socket after each request, which works great for the scope of this project. But if I wanted to support persistent connections, I’d need to avoid calling &lt;code&gt;socket.end()&lt;/code&gt; and implement additional logic. For now, closing the connection after each request is the simplest and safest approach. It’s clean, predictable, and prevents resource leaks.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-s-next--1&quot;&gt;What’s Next?&lt;/h3&gt;
&lt;p&gt;There’s a lot more I can add to this server, which is also the reason why I love to start a project from &lt;strong&gt;ZERO&lt;/strong&gt;. I get to own every bite of it and can add on to it as learning-needs/curiosity fit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTTPS:&lt;/strong&gt; Right now, it’s plain HTTP. Adding SSL/TLS would make it secure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebSockets:&lt;/strong&gt; For real-time communication, like chat apps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentication:&lt;/strong&gt; Handle user logins and sessions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Routing:&lt;/strong&gt; Add support for more content types and dynamically set MIME types based on file extensions or request content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caching:&lt;/strong&gt; Improve performance by storing frequently requested data.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-it-matters---meta-learnings&quot;&gt;Why It Matters - Meta Learnings&lt;/h3&gt;
&lt;p&gt;I am a huge fan of Tim Ferriss, especially when it comes to his lessons on &lt;strong&gt;meta learning&lt;/strong&gt;, or the ability to learn pretty much everything and become a top performer in any field in a short period of time.&lt;/p&gt;
&lt;p&gt;Writing an HTTP server from scratch was a way to dig deeper into one of the fundamental building blocks of full-stack engineering—to deeply understand the web and servers. It was also interesting to see how constraints (not using a framework like Express) force you to think critically and solve problems creatively, which of course deepens my understanding. Last but not least, there’s simply a unique joy in building something functional from scratch! &lt;/p&gt;
&lt;p&gt;You can check the project on &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/manonja/node-http-server-from-scratch&quot;&gt;GitHub&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Happy building!&lt;/p&gt;
</description>
<category>Full-stack Dev</category>
<guid isPermaLink="true">https://coderlegion.com/3299/building-a-http-server-from-scratch-know-the-http-principles-to-be-a-better-fs-developer</guid>
<pubDate>Mon, 09 Jun 2025 18:45:18 +0000</pubDate>
</item>
</channel>
</rss>