<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged build</title>
<link>https://coderlegion.com/tag/build</link>
<description>Powered by Question2Answer</description>
<item>
<title>Static vs Dynamic Websites for SEO</title>
<link>https://coderlegion.com/25639/static-vs-dynamic-websites-for-seo</link>
<description>
&lt;p&gt;&lt;strong&gt;Direct answer:&lt;/strong&gt; neither static nor dynamic websites are inherently better for SEO. A static model often fits a small, stable site when technical owners can build and deploy changes. A dynamic model often fits frequent publishing, structured records, many editors, or application features. Both can rank when important content and links are accessible, pages return meaningful status codes, URLs remain stable, metadata is correct, and the system is maintained.&lt;/p&gt;
      &lt;p&gt;This guide chooses a publishing architecture by content change frequency, editorial ownership, scale, integration needs, performance, and operational risk. It does not compare specific frameworks or website builders, teach client-side rendering, or provide a migration runbook. If changing architecture will also change live URLs or templates, use the &lt;a rel=&quot;nofollow&quot; href=&quot;https://floxolab.com/seo/guides/site-migration-seo-checklist&quot;&gt;site migration SEO checklist&lt;/a&gt; before launch.&lt;/p&gt;

      &lt;h2 id=&quot;the-short-decision&quot;&gt;The short decision&lt;/h2&gt;
      &lt;div class=&quot;article-table-wrap&quot;&gt;
        &lt;table class=&quot;article-table&quot;&gt;
          &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Operating condition&lt;/th&gt;&lt;th&gt;Likely fit&lt;/th&gt;&lt;th&gt;Main reason&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;&lt;td&gt;A small service or brochure site changes a few times per month&lt;/td&gt;&lt;td&gt;Static&lt;/td&gt;&lt;td&gt;Prebuilt pages can keep delivery simple when a technical owner controls publishing&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Editors publish frequently without developer help&lt;/td&gt;&lt;td&gt;Dynamic or CMS-backed&lt;/td&gt;&lt;td&gt;Roles, previews, structured fields, scheduling, and revisions reduce editorial friction&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Thousands of products, locations, listings, or records share templates&lt;/td&gt;&lt;td&gt;Dynamic or hybrid&lt;/td&gt;&lt;td&gt;Structured data sources can generate and update many pages consistently&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Personalized account or application features sit beside public pages&lt;/td&gt;&lt;td&gt;Hybrid&lt;/td&gt;&lt;td&gt;Public pages can be pre-rendered while authenticated functions remain dynamic&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;The initial response is a nearly empty app shell and important content needs JavaScript&lt;/td&gt;&lt;td&gt;Repair the output&lt;/td&gt;&lt;td&gt;The immediate problem is rendering and discovery, not the architecture label&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/div&gt;
      &lt;p&gt;A hybrid system is normal. A site can generate public pages at build time, refresh selected pages after publication, read content from a headless CMS, and use dynamic endpoints for search, forms, inventory, or accounts. Choose components by job instead of forcing the entire site into one category.&lt;/p&gt;

      &lt;h2 id=&quot;1-define-static-and-dynamic-by-when-html-is-produced&quot;&gt;1. Define static and dynamic by when HTML is produced&lt;/h2&gt;
      &lt;p&gt;A static page is prepared before a visitor requests it, then served as an existing file or cached artifact. It can still be generated from templates, Markdown, a database, or an API during a build. It can also contain forms, analytics, interactive components, and JavaScript enhancements. Static does not mean handwritten, unchanging, or free of JavaScript.&lt;/p&gt;
      &lt;p&gt;A dynamic page is assembled or selected in response to a request, usually from application logic, structured content, a database, or a CMS. It can still return complete server-rendered HTML, use aggressive caching, and load quickly. Dynamic does not mean slow, uncrawlable, or visually complicated.&lt;/p&gt;
      &lt;p&gt;Client-side rendering is a separate decision. Google describes JavaScript processing as crawling, rendering, and indexing. A browser can receive a minimal shell and build the page later, whether the content originated in a static build or a dynamic service. That extra dependency is what must be tested.&lt;/p&gt;

      &lt;h2 id=&quot;2-measure-the-publishing-workflow-before-choosing&quot;&gt;2. Measure the publishing workflow before choosing&lt;/h2&gt;
      &lt;p&gt;Count real changes for a representative month. Include new pages, edits, redirects, media replacements, legal updates, product changes, urgent corrections, and removals. Then record who makes each change, what they need to preview, who approves it, and how quickly it must go live.&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Choose static more confidently&lt;/strong&gt; when changes are limited, a technical owner is available, deployments are reliable, and most pages share a controlled template.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Choose dynamic more confidently&lt;/strong&gt; when non-technical editors publish often, structured records change independently, multiple roles need permissions, or content must be scheduled.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Choose hybrid more confidently&lt;/strong&gt; when public acquisition pages need predictable output but parts of the product require live data or personalization.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;Do not ask only whether an editor can publish. Ask whether the system prevents missing titles, accidental duplicate URLs, broken internal links, oversized images, invalid canonicals, and stale records. A convenient editor that produces inconsistent pages creates a maintenance cost. A simple static repository that only one unavailable developer understands creates a different maintenance cost.&lt;/p&gt;

      &lt;h2 id=&quot;3-test-the-seo-output-not-the-platform-label&quot;&gt;3. Test the SEO output, not the platform label&lt;/h2&gt;
      &lt;p&gt;Google's current minimum technical requirements are direct: Googlebot must not be blocked, the page must return an HTTP 200 success response, and it must contain indexable content. Meeting those requirements makes a page eligible for indexing but does not guarantee indexing or rankings.&lt;/p&gt;
      &lt;p&gt;For every representative template, verify the initial response and the rendered result:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;the final URL returns the intended status code and does not rely on a soft error page;&lt;/li&gt;
        &lt;li&gt;the primary content, H1, title, description, canonical, and relevant structured data are correct;&lt;/li&gt;
        &lt;li&gt;important navigation and contextual links are normal anchors with resolvable &lt;code&gt;href&lt;/code&gt; values;&lt;/li&gt;
        &lt;li&gt;robots rules, authentication, CDN controls, and resource policies do not block necessary content;&lt;/li&gt;
        &lt;li&gt;mobile and desktop receive the same essential page job and information.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;Google can render JavaScript, but its documentation still recommends server-side or pre-rendering because it can improve delivery for users and crawlers, and not every bot runs JavaScript. Use the &lt;a rel=&quot;nofollow&quot; href=&quot;https://floxolab.com/seo/guides/technical-seo-audit-screaming-frog-search-console&quot;&gt;technical SEO audit workflow&lt;/a&gt; to compare the live crawl with Google evidence rather than assuming a successful browser screenshot proves indexability.&lt;/p&gt;

      &lt;h2 id=&quot;4-compare-performance-with-representative-templates&quot;&gt;4. Compare performance with representative templates&lt;/h2&gt;
      &lt;p&gt;Static delivery can reduce request-time computation and make caching straightforward. That is an operational advantage, not an automatic performance win. A static page can still ship oversized images, unused scripts, third-party tags, layout shifts, and a large client bundle. A dynamic page can return fast, cached HTML with optimized assets.&lt;/p&gt;
      &lt;p&gt;Test the templates that carry business value: homepage, service, article, category, product, location, and conversion page. Measure the production build on realistic phones and connections. Separate server response, HTML delivery, asset weight, rendering work, and third-party code so the team knows what the architecture actually changes.&lt;/p&gt;
      &lt;p&gt;Do not choose a platform from a demo homepage or a vendor benchmark. Build one representative page with real navigation, fonts, images, analytics, consent controls, and content. If LCP, CLS, or INP is the actual failure, use the &lt;a rel=&quot;nofollow&quot; href=&quot;https://floxolab.com/seo/guides/how-to-fix-core-web-vitals&quot;&gt;Core Web Vitals diagnosis&lt;/a&gt; rather than treating static conversion as the fix.&lt;/p&gt;

      &lt;h2 id=&quot;5-compare-editorial-control-and-content-integrity&quot;&gt;5. Compare editorial control and content integrity&lt;/h2&gt;
      &lt;p&gt;Dynamic content systems often justify their complexity through editorial safeguards: required fields, validation, reusable entities, role-based access, scheduled publication, previews, revision history, and central media management. Those capabilities matter when publishing errors are more likely than server errors.&lt;/p&gt;
      &lt;p&gt;Static workflows can provide similar controls through schemas, automated checks, pull-request review, preview deployments, and content builds. They work well when the team is comfortable with that workflow. They fail when every spelling correction requires an outside developer and the resulting queue leaves prices, staff, hours, or service details stale.&lt;/p&gt;
      &lt;div class=&quot;article-callout&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Decision rule:&lt;/strong&gt; choose the least complex system that lets the actual owners publish accurate, accessible pages at the required frequency without bypassing validation.&lt;/p&gt;
      &lt;/div&gt;
      &lt;p&gt;Run a publishing drill before signing. Ask the intended editor to create a page, change its slug, replace its image, preview mobile output, schedule it, restore an earlier version, and retire it safely. Record where technical help is needed and which changes can break site-wide templates.&lt;/p&gt;

      &lt;h2 id=&quot;6-compare-scale-integrations-and-url-stability&quot;&gt;6. Compare scale, integrations, and URL stability&lt;/h2&gt;
      &lt;p&gt;Page count alone does not decide architecture. A static generator may handle thousands of pages efficiently, while a poorly designed build may become slow or fragile. A dynamic system may update one record instantly, while a weak template can expose duplicate parameter URLs or inconsistent metadata at scale.&lt;/p&gt;
      &lt;p&gt;List the data relationships the site must maintain:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;products, variants, availability, prices, and categories;&lt;/li&gt;
        &lt;li&gt;locations, practitioners, services, opening hours, and service areas;&lt;/li&gt;
        &lt;li&gt;authors, articles, topics, translations, and related content;&lt;/li&gt;
        &lt;li&gt;accounts, bookings, search, filters, payments, and private records.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;For each relationship, decide its source of truth, update frequency, owner, fallback behavior, and public URL. Stable, descriptive URLs and crawlable internal paths matter in either model. Filters and personalization should not create unlimited indexable combinations merely because the system can generate them.&lt;/p&gt;

      &lt;h2 id=&quot;7-model-maintenance-security-and-ownership&quot;&gt;7. Model maintenance, security, and ownership&lt;/h2&gt;
      &lt;p&gt;A small static surface can reduce runtime components and patching obligations, but the full system may still include a generator, package dependencies, build service, CMS, forms, search, analytics, and a CDN. A dynamic platform may centralize updates and access control, but it adds application, database, plugin, cache, and hosting responsibilities.&lt;/p&gt;
      &lt;div class=&quot;article-table-wrap&quot;&gt;
        &lt;table class=&quot;article-table&quot;&gt;
          &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Question&lt;/th&gt;&lt;th&gt;Static risk to price&lt;/th&gt;&lt;th&gt;Dynamic risk to price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
          &lt;tbody&gt;
            &lt;tr&gt;&lt;td&gt;Who can publish an urgent correction?&lt;/td&gt;&lt;td&gt;Developer or deployment dependency&lt;/td&gt;&lt;td&gt;Permissions, plugin, or workflow dependency&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;What must be patched?&lt;/td&gt;&lt;td&gt;Build dependencies and connected services&lt;/td&gt;&lt;td&gt;Runtime, database, CMS, extensions, and integrations&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;How is failure recovered?&lt;/td&gt;&lt;td&gt;Previous build and deployment rollback&lt;/td&gt;&lt;td&gt;Application, database, media, and configuration restore&lt;/td&gt;&lt;/tr&gt;
            &lt;tr&gt;&lt;td&gt;Can the business leave the vendor?&lt;/td&gt;&lt;td&gt;Source, build instructions, and service credentials&lt;/td&gt;&lt;td&gt;Content, media, schema, redirects, users, and database export&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/div&gt;
      &lt;p&gt;Price the operating year, not just the build. Include hosting, licenses, developer availability, editor time, monitoring, backups, security response, dependency updates, testing, and recovery drills. Name the person responsible for each item.&lt;/p&gt;

      &lt;h2 id=&quot;use-a-scored-proof-before-committing&quot;&gt;Use a scored proof before committing&lt;/h2&gt;
      &lt;p&gt;Ask each proposed implementation to complete the same proof:&lt;/p&gt;
      &lt;ol&gt;
        &lt;li&gt;&lt;strong&gt;Build one real template.&lt;/strong&gt; Use production-like content, media, navigation, metadata, and structured data.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Publish through the real owner.&lt;/strong&gt; Let an editor or developer complete the normal change and approval path.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Inspect the response.&lt;/strong&gt; Check status, HTML, rendered DOM, canonicals, links, mobile parity, and error behavior.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Measure production delivery.&lt;/strong&gt; Include caches, third-party scripts, consent tools, and representative network conditions.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Simulate failure.&lt;/strong&gt; Roll back a bad release, restore content, revoke a user, and recover from an integration outage.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Export the site.&lt;/strong&gt; Confirm that the business can recover content, media, redirects, structured records, and build instructions.&lt;/li&gt;
      &lt;/ol&gt;
      &lt;p&gt;Score crawlability, publishing effort, performance, accessibility, maintenance, recovery, ownership, and annual cost. Weight the categories before seeing vendor results so a polished editor or a fast demo does not override the business constraints.&lt;/p&gt;

      &lt;h2 id=&quot;changing-architecture-is-still-a-migration&quot;&gt;Changing architecture is still a migration&lt;/h2&gt;
      &lt;p&gt;Moving from static to dynamic, dynamic to static, or one hybrid model to another can change rendering, templates, internal links, metadata, canonicals, status codes, sitemaps, and URLs even when the design looks similar. Preserve useful URLs unless there is a documented reason to change them. Map necessary moves to direct permanent redirects and compare old and new outputs before and after launch.&lt;/p&gt;
      &lt;p&gt;Do not combine a platform move, redesign, domain change, URL rewrite, content cleanup, and analytics replacement without a baseline. Each additional change makes losses harder to diagnose. The migration checklist handles the inventory, redirect, launch, and monitoring work; this guide only decides the target architecture.&lt;/p&gt;

      &lt;h2 id=&quot;what-not-to-do&quot;&gt;What not to do&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;strong&gt;Do not call static automatically fast.&lt;/strong&gt; Measure assets, scripts, rendering, caching, and real templates.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Do not call dynamic automatically bad for SEO.&lt;/strong&gt; Complete server-rendered HTML and stable URLs can work well.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Do not select a CMS only for editor convenience.&lt;/strong&gt; Test the output, validation, roles, recovery, and exit path.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Do not select a static workflow that only one person can operate.&lt;/strong&gt; Document publishing and recovery ownership.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Do not hide primary content behind interaction or late API calls.&lt;/strong&gt; Verify the initial and rendered page.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Do not use architecture to excuse stale content.&lt;/strong&gt; Assign review dates and owners in either system.&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;Do not change URLs for cosmetic reasons during the move.&lt;/strong&gt; Preserve accumulated signals and user paths.&lt;/li&gt;
      &lt;/ul&gt;

      &lt;h2 id=&quot;verification-checklist&quot;&gt;Verification checklist&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;The choice is based on real update frequency, editors, data relationships, and integrations.&lt;/li&gt;
        &lt;li&gt;Representative pages return correct status codes and complete indexable content.&lt;/li&gt;
        &lt;li&gt;Important content, links, titles, canonicals, and structured data survive the rendered result.&lt;/li&gt;
        &lt;li&gt;Mobile output preserves the same essential page job and information.&lt;/li&gt;
        &lt;li&gt;Performance was measured on production-like templates rather than inferred from the label.&lt;/li&gt;
        &lt;li&gt;The intended owner successfully completed a publishing and rollback drill.&lt;/li&gt;
        &lt;li&gt;Maintenance, security, backup, recovery, and annual costs have named owners.&lt;/li&gt;
        &lt;li&gt;The business can export content, media, redirects, schemas, credentials, and build instructions.&lt;/li&gt;
        &lt;li&gt;Any architecture change has a separate migration baseline and validation plan.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;p&gt;The best architecture is the one the business can operate reliably while producing accessible, stable, useful pages. Static, dynamic, and hybrid approaches are implementation choices. SEO quality appears in the output and in the team's ability to keep that output correct.&lt;/p&gt;

      &lt;h2 id=&quot;evidence-basis&quot;&gt;Evidence basis&lt;/h2&gt;
      &lt;p&gt;Google's technical requirements, JavaScript processing, server-side and pre-rendering guidance, mobile parity guidance, and general site organization practices were checked from official documentation on August 10, 2026. The decision tables, publishing drill, operating-cost model, and scored proof are FloxoLab operational frameworks, not Google ranking factors or guarantees.&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;https://developers.google.com/search/docs/essentials/technical&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot;&gt;Google Search Central: technical requirements&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot;&gt;Google Search Central: JavaScript SEO basics&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot;&gt;Google Search Central: mobile-first indexing best practices&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;https://developers.google.com/search/docs/fundamentals/seo-starter-guide&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot;&gt;Google Search Central: SEO Starter Guide&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;

      &lt;nav class=&quot;article-related&quot; aria-label=&quot;Related reading&quot;&gt;
        &lt;p class=&quot;article-related-h mono&quot;&gt;Continue the architecture decision&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://floxolab.com/seo/guides/technical-seo-audit-screaming-frog-search-console&quot;&gt;Validate Crawl and Google Evidence&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://floxolab.com/seo/guides/mobile-seo-checklist&quot;&gt;Test the Mobile Page Customers and Google See&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://floxolab.com/seo/guides/how-to-fix-core-web-vitals&quot;&gt;Diagnose Core Web Vitals by Cause&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://floxolab.com/seo/guides/site-migration-seo-checklist&quot;&gt;Protect URLs During an Architecture Change&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/nav&gt;

      &lt;div class=&quot;article-cta&quot;&gt;
        &lt;p class=&quot;cta-h&quot;&gt;Need the architecture decision tested against the live site?&lt;/p&gt;
        &lt;p&gt;FloxoLab can inspect crawlability, rendered output, performance constraints, publishing ownership, and migration risk before a platform commitment.&lt;/p&gt;
        &amp;lt;a href=&quot;https://floxolab.&lt;/div&gt;
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/25639/static-vs-dynamic-websites-for-seo</guid>
<pubDate>Tue, 08 Sep 2026 15:50:00 +0000</pubDate>
</item>
<item>
<title>How Long Does It Take to Build a Custom Website? 2026 Timeline</title>
<link>https://coderlegion.com/21100/how-long-does-it-take-to-build-a-custom-website-2026-timeline</link>
<description>
&lt;h1&gt;How Long Does It Take to Build a Custom Website? A 2026 Timeline From the Workshop&lt;/h1&gt;
&lt;p class=&quot;post-byline&quot;&gt;
    &lt;span&gt;&amp;#9201;&amp;#65039; Project Timeline&lt;/span&gt; &amp;middot;     Updated June 2026     &amp;middot; 10 min read    &amp;middot; by Jacob Campbell
&lt;/p&gt;

&lt;p class=&quot;article-intro&quot;&gt;&lt;/p&gt;&lt;p&gt;I'm Jacob Campbell, and after delivering custom sites for years I can tell you the honest answer to &quot;how long does a website take?&quot; up front: a focused custom business site is usually ready in about a month, while ecommerce and web apps take longer because there's more to build and test. But here's the part most timelines hide &amp;mdash; the single biggest variable isn't the developer's speed, it's how quickly &lt;em&gt;content and decisions&lt;/em&gt; arrive from your side. I've had a build sit finished for three weeks waiting on a logo. This guide gives you a realistic 2026 timeline for each project type, a phase-by-phase look at where the days actually go, what slows a build down, and exactly how to launch faster without sacrificing quality.&lt;/p&gt;

&lt;h2&gt;Key facts&lt;/h2&gt;
&lt;div class=&quot;post-stats&quot;&gt;
        &lt;div class=&quot;post-stat&quot;&gt;&lt;div class=&quot;v&quot;&gt;~1 month&lt;/div&gt;&lt;div class=&quot;l&quot;&gt;Custom business website&lt;/div&gt;&lt;/div&gt;
        &lt;div class=&quot;post-stat&quot;&gt;&lt;div class=&quot;v&quot;&gt;4&amp;ndash;8 weeks&lt;/div&gt;&lt;div class=&quot;l&quot;&gt;Custom ecommerce store&lt;/div&gt;&lt;/div&gt;
        &lt;div class=&quot;post-stat&quot;&gt;&lt;div class=&quot;v&quot;&gt;8&amp;ndash;12+ weeks&lt;/div&gt;&lt;div class=&quot;l&quot;&gt;SaaS / web application&lt;/div&gt;&lt;/div&gt;
        &lt;div class=&quot;post-stat&quot;&gt;&lt;div class=&quot;v&quot;&gt;Day 1&lt;/div&gt;&lt;div class=&quot;l&quot;&gt;Scope &amp;amp; timeline locked&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;

&lt;h2&gt;The headline numbers&lt;/h2&gt;
&lt;p&gt;A professional custom business website typically takes &lt;strong&gt;about one month&lt;/strong&gt; from kickoff to launch. A custom ecommerce store usually runs &lt;strong&gt;four to eight weeks&lt;/strong&gt;, and a SaaS or web application is &lt;strong&gt;eight to twelve weeks or more&lt;/strong&gt;, depending on feature depth. These ranges assume content and feedback arrive on schedule. The coding itself is rarely the bottleneck &amp;mdash; in my projects the build phase is the most predictable part; the wait time lives almost entirely on the client side.&lt;/p&gt;&lt;h2&gt;A realistic timeline, phase by phase&lt;/h2&gt;
&lt;p&gt;A typical custom build moves through five phases. &lt;strong&gt;Discovery and scope&lt;/strong&gt; (a few days) locks exactly what's being built. &lt;strong&gt;Design and layout&lt;/strong&gt; (about a week) produces the templates. &lt;strong&gt;Development&lt;/strong&gt; (one to three weeks) is where the hand-coding happens. &lt;strong&gt;Content, SEO, and testing&lt;/strong&gt; (a few days) covers schema, Core Web Vitals tuning, and cross-device QA. Then &lt;strong&gt;deployment and launch&lt;/strong&gt;. Because the code is written rather than assembled from plugins, the testing phase stays short &amp;mdash; there are no theme conflicts or plugin incompatibilities to chase down at the end.&lt;/p&gt;&lt;h2&gt;What actually slows a build down&lt;/h2&gt;
&lt;p&gt;I track the cause of every delay, and the pattern never changes. The top four are: slow content delivery (copy, images, logos), late or shifting decisions, scope that wasn't pinned down at the start, and waiting on third-party access &amp;mdash; a domain registrar login, a payment account, a CRM API key. Notice that none of these are coding problems. They're planning problems, and every one of them is avoidable with a clear brief and prepared assets before development begins.&lt;/p&gt;&lt;h2&gt;How to launch your website faster&lt;/h2&gt;
&lt;p&gt;If you want speed, do four things before development starts: &lt;strong&gt;lock the scope&lt;/strong&gt; so there's no mid-build redesign; &lt;strong&gt;gather your content and brand assets&lt;/strong&gt; (final copy, high-res images, logo files, brand colours); &lt;strong&gt;name one decision-maker&lt;/strong&gt; for sign-off so feedback doesn't arrive by committee; and &lt;strong&gt;prepare domain and payment access&lt;/strong&gt; in advance. Clients who do this consistently launch on the early end of every range &amp;mdash; and a flat-fee scope removes the change-order back-and-forth that stretches most projects elsewhere.&lt;/p&gt;&lt;h2&gt;Why custom code doesn't mean slower delivery&lt;/h2&gt;
&lt;p&gt;People assume hand-coding takes longer than a template. For a quality result, the opposite is usually true. With a template you spend the project fighting the theme, stripping out bloat you didn't ask for, and patching plugins to behave. Custom code is built to spec the first time, so the effort goes into &lt;em&gt;your&lt;/em&gt; requirements rather than undoing someone else's defaults. The result is a lighter, faster, Lighthouse-100 site delivered on a more predictable schedule &amp;mdash; which is exactly why I don't treat &quot;fast&quot; and &quot;custom&quot; as a trade-off.&lt;/p&gt;&lt;h2&gt;Sources &amp;amp; further reading&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://web.dev/articles/vitals&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot;&gt;web.dev &amp;mdash; Core Web Vitals (the metrics tuned in the testing phase)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;/blog/how-much-does-a-custom-website-cost&quot;&gt;BuiltToWinWeb &amp;mdash; What a custom website costs&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Timeline ranges reflect my own delivery windows across business, ecommerce, and SaaS projects as of June 2026.&lt;/p&gt;
&lt;h2&gt;Related services&lt;/h2&gt;
&lt;div class=&quot;post-related&quot;&gt;
        &lt;a href=&quot;/free-quote/&quot;&gt;
        &lt;div class=&quot;t&quot;&gt;Get your project timeline&lt;/div&gt;
        &lt;div class=&quot;d&quot;&gt;Tell us your scope and receive a flat-fee quote and delivery window within 24 hours.&lt;/div&gt;
    &lt;/a&gt;
        &lt;a href=&quot;/services/custom-PHP-website&quot;&gt;
        &lt;div class=&quot;t&quot;&gt;Custom website packages&lt;/div&gt;
        &lt;div class=&quot;d&quot;&gt;See what is included in each flat-fee build, start to launch.&lt;/div&gt;
    &lt;/a&gt;
        &lt;a href=&quot;/blog/how-much-does-a-custom-website-cost&quot;&gt;
        &lt;div class=&quot;t&quot;&gt;What a custom website costs&lt;/div&gt;
        &lt;div class=&quot;d&quot;&gt;Pricing for business, ecommerce, and SaaS projects.&lt;/div&gt;
    &lt;/a&gt;
    &lt;/div&gt;

&lt;h2&gt;Frequently asked questions&lt;/h2&gt;
&lt;h3&gt;How long does it take to build a custom website?&lt;/h3&gt;
&lt;p&gt;A custom business website is usually delivered in about one month. Ecommerce stores take roughly four to eight weeks and SaaS or web applications take eight to twelve weeks or more, depending on features and how quickly content is provided.&lt;/p&gt;
&lt;h3&gt;Can a website be built faster than a month?&lt;/h3&gt;
&lt;p&gt;Yes. Smaller sites with ready content and a locked scope can launch in two to three weeks. The fastest projects are the ones where content, branding, and decisions are prepared before development begins.&lt;/p&gt;
&lt;h3&gt;What slows down a website project?&lt;/h3&gt;
&lt;p&gt;The biggest delays are late content, shifting requirements, unclear scope, and waiting on domain or payment access. Coding is rarely the bottleneck &amp;mdash; planning and content usually are.&lt;/p&gt;
&lt;h3&gt;Does a custom site take longer than a template?&lt;/h3&gt;
&lt;p&gt;Not necessarily. A custom build is coded to spec once, while templates often require removing bloat and patching plugins. A quality custom site is frequently delivered on a more predictable timeline than a heavily customised template.&lt;/p&gt;
&lt;h3&gt;How can I make my website launch faster?&lt;/h3&gt;
&lt;p&gt;Lock your scope early, gather content and brand assets up front, assign one decision-maker, and prepare domain and payment access in advance. A clear flat-fee scope removes the back-and-forth that stretches most projects.&lt;/p&gt;

&lt;div class=&quot;post-cta&quot;&gt;
    &lt;h2&gt;Get a clear timeline for your website&lt;/h2&gt;
    &lt;p&gt;Tell us what you need and receive a flat-fee quote with a defined delivery window within 24 hours &amp;mdash; no monthly fees, no pressure.&lt;/p&gt;
    &lt;a class=&quot;btn&quot; href=&quot;/free-quote/&quot;&gt;Get my free quote&lt;/a&gt;
&lt;/div&gt;
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/21100/how-long-does-it-take-to-build-a-custom-website-2026-timeline</guid>
<pubDate>Mon, 29 Jun 2026 07:45:45 +0000</pubDate>
</item>
<item>
<title>High-cardinality values for build flags in Rust</title>
<link>https://coderlegion.com/1880/high-cardinality-values-for-build-flags-in-rust</link>
<description>&lt;p&gt;While working on my &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/ajavageek/wasm-kubernetes&quot;&gt;demo&lt;/a&gt; on WebAssembly and Kubernetes, I wanted to create three different binaries based on the same code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native: compile the Rust code to regular native code as a baseline&lt;/li&gt;
&lt;li&gt;Embed: compile to WebAssembly and use the WasmEdge runtime image as the base Docker image&lt;/li&gt;
&lt;li&gt;Runtime: compile to WebAssembly, use a base &lt;code&gt;scratch&lt;/code&gt; image as my base image, and set the runtime when running the code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The code itself is an HTTP server that offers a single endpoint. For the sake of the demo, I wanted it to return the flavour of the underlying image.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl localhost:3000/get

{&quot;source&quot;: &quot;native&quot;, &quot;data&quot;: {}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The idea is to have a single codebase that I can compile to native or WebAssembly. I solved this requirement by using a &lt;code&gt;cfg&lt;/code&gt; compile flag.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#[cfg(flavor = &quot;native&quot;)]
const FLAVOR: &amp;amp;str = &quot;native&quot;;

#[cfg(flavor = &quot;embed&quot;)]
const FLAVOR: &amp;amp;str = &quot;embed&quot;;

#[cfg(flavor = &quot;runtime&quot;)]
const FLAVOR: &amp;amp;str = &quot;runtime&quot;;

// Use FLAVOR later in the returned HTTP response
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In my case, I can live with three different values. But what if I had to deal with a high cardinality, say, fifteen? It would be quite a bore to define them manually. I searched for a solution and found Build Scripts.&lt;/p&gt;
&lt;p&gt;&amp;gt;Some packages need to compile third-party non-Rust code, for example C libraries. Other packages need to link to C libraries which can either be located on the system or possibly need to be built from source. Others still need facilities for functionality such as code generation before building (think parser generators).&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;gt;Cargo does not aim to replace other tools that are well-optimized for these tasks, but it does integrate with them with custom build scripts. Placing a file named &lt;code&gt;build.rs&lt;/code&gt; in the root of a package will cause Cargo to compile that script and execute it just before building the package.&lt;/p&gt;
&lt;p&gt;&amp;gt;-- &lt;a rel=&quot;nofollow&quot; href=&quot;https://doc.rust-lang.org/cargo/reference/build-scripts.html&quot;&gt;Build Scripts&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let's try with a simple &lt;code&gt;build.script&lt;/code&gt; at the root of the crate:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fn main() {
    println!(&quot;Hello from build script!&quot;);
}

cargo build

Compiling high-cardinality-cfg-compile v0.1.0 (/Users/nico/projects/private/high-cardinality-cfg-compile)
 Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.08s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There isn't any log–nothing seems to happen. The documentation reveals the reason:&lt;/p&gt;
&lt;p&gt;&amp;gt;The output of the script is hidden from the terminal during normal compilation.&lt;br&gt;
&amp;gt;If you would like to see the output directly in your terminal, invoke Cargo as &quot;very verbose&quot; with the &lt;code&gt;-vv&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;Let's compile again with the verbose flag:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cargo build --vv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The output is what we expect:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;...
[high-cardinality-cfg-compile 0.1.0] Hello from build script!
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now is the time to do something useful: I'll use the build script to replace the hard-coded constants above. For that, I'll generate a Rust code file that contains the value passed for flavor.&lt;/p&gt;
&lt;p&gt;Note the &lt;strong&gt;build script runs before compilation&lt;/strong&gt;. Hence, it doesn't have access to the &lt;code&gt;cfg&lt;/code&gt; flags. Instead, I'll pass the value as a &lt;code&gt;Cargo.toml&lt;/code&gt; package metadata key value.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[package.metadata]
flavor = &quot;foobar&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For our build script to read the &lt;code&gt;Cargo.toml&lt;/code&gt; metadata, we need to add a build dependency:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[build-dependencies]
cargo_metadata = &quot;0.19.1&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The code is straightforward:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fn main() {
    let metadata = MetadataCommand::new()                                         //1
        .exec()
        .expect(&quot;Failed to fetch cargo metadata&quot;);

    let package = metadata.root_package().expect(&quot;No root package found&quot;);        //2

    let flavor = package                                                          //3
        .metadata
        .get(&quot;flavor&quot;)
        .and_then(|f| f.as_str())
        .expect(&quot;flavor is not set in Cargo.toml under [package.metadata]&quot;);

    let dest_path = Path::new(&quot;src&quot;).join(&quot;flavor.rs&quot;);                           //4

    fs::write(&amp;amp;dest_path, format!(&quot;pub const FLAVOR: &amp;amp;str = \&quot;{}\&quot;;\n&quot;, flavor))  //5
        .expect(&quot;Failed to write flavor.rs&quot;);

    println!(&quot;cargo:rerun-if-changed=Cargo.toml&quot;);
    println!(&quot;cargo:warning=FLAVOR written to {}&quot;, dest_path.display());
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Get the metadata&lt;/li&gt;
&lt;li&gt;Get the package where we want to create the new file&lt;/li&gt;
&lt;li&gt;Read the flavor value&lt;/li&gt;
&lt;li&gt;Reference &lt;code&gt;src/flavor.rs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Write &lt;code&gt;pub const FLAVOR: &amp;amp;str = &amp;lt;flavor&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On the code side, we only need to use the &lt;code&gt;FLAVOR&lt;/code&gt; const from the &lt;code&gt;flavor&lt;/code&gt; module:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mod flavor;

fn main() {
    println!(&quot;Hello from flavor {}&quot;, flavor::FLAVOR);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Running the program outputs the flavor configured in the &lt;code&gt;Cargo.toml&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cargo run

Hello from flavor foobar
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In this, I've shown how to use high-cardinality build parameters from the package metadata. I could have achieved the same with environment variables, but I wanted to learn about the &lt;code&gt;metadata&lt;/code&gt; section of the &lt;code&gt;Cargo.toml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;build.rs&lt;/code&gt; file is a handy trick for achieving goals that aren't possible with regular Cargo features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To go further:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://doc.rust-lang.org/cargo/reference/build-scripts.html&quot;&gt;Build Scripts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Originally published at &lt;a rel=&quot;nofollow&quot; href=&quot;https://blog.frankel.ch/high-cardinality-values-build-flags-rust/&quot;&gt;A Java Geek&lt;/a&gt; on April 13&lt;sup&gt;th&lt;/sup&gt;, 2025&lt;/em&gt;&lt;/p&gt;
</description>
<category>Java</category>
<guid isPermaLink="true">https://coderlegion.com/1880/high-cardinality-values-for-build-flags-in-rust</guid>
<pubDate>Thu, 17 Apr 2025 08:10:37 +0000</pubDate>
</item>
</channel>
</rss>