<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abdullah Elmassri</title>
    <description>The latest articles on DEV Community by Abdullah Elmassri (@abdullah_elkaiser).</description>
    <link>https://dev.to/abdullah_elkaiser</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4200767%2Fbeda9e14-16dc-4e6d-8c2d-435f14942c51.png</url>
      <title>DEV Community: Abdullah Elmassri</title>
      <link>https://dev.to/abdullah_elkaiser</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdullah_elkaiser"/>
    <language>en</language>
    <item>
      <title>Din pålitliga taxi i Borlänge website</title>
      <dc:creator>Abdullah Elmassri</dc:creator>
      <pubDate>Thu, 22 Oct 2026 15:21:00 +0000</pubDate>
      <link>https://dev.to/abdullah_elkaiser/din-palitliga-taxi-i-borlange-website-3d73</link>
      <guid>https://dev.to/abdullah_elkaiser/din-palitliga-taxi-i-borlange-website-3d73</guid>
      <description>&lt;p&gt;The hardest part of a small-business website isn’t always the design. Sometimes it’s making sure the right website actually appears when someone visits the domain.&lt;/p&gt;

&lt;p&gt;I’ve been building a website for Din Borlänge Taxi AB, a local taxi company. The goal was straightforward: help visitors understand the service, see pricing, and either call or send a booking request—without making them hunt for the next step.&lt;/p&gt;

&lt;p&gt;That sounds like a frontend task. It turned into a useful lesson in routing and deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with what a visitor needs to know
&lt;/h2&gt;

&lt;p&gt;Before thinking about components, I considered the questions a visitor might have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you serve my area?&lt;/li&gt;
&lt;li&gt;What might the trip cost?&lt;/li&gt;
&lt;li&gt;Can I book online, or should I call?&lt;/li&gt;
&lt;li&gt;Is the information available in my language?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That shaped the site around a clear homepage, service and pricing pages, contact details, and a booking flow. Swedish and English support was part of the initial design rather than something to bolt on later.&lt;/p&gt;

&lt;p&gt;The site uses React and Vite for the frontend. The booking and contact forms send requests to a separate Node API, which validates submissions on the server. This matters because browser-side checks can improve the experience, but they can’t be trusted as the only validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A custom domain isn’t the same as a published website
&lt;/h2&gt;

&lt;p&gt;The domain had been verified, so I expected the taxi site to appear there. But when I checked the live domain, it showed a different app already in the project. The taxi site’s previous path returned a 404.&lt;/p&gt;

&lt;p&gt;That exposed an important distinction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Domain verification&lt;/strong&gt; confirms that DNS points to Replit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publishing&lt;/strong&gt; puts a particular project build online.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing&lt;/strong&gt; decides which app handles a request to a given URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are separate steps. A domain can be verified while the site you intend to show is still not the one serving the homepage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give each app a clear route
&lt;/h2&gt;

&lt;p&gt;This project contains more than one web app. Daylight, a personal productivity dashboard, already occupied the root route. The taxi website had been configured under &lt;code&gt;/din-borlange-taxi/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I wanted the taxi site to be the homepage without deleting Daylight, so I changed the route assignments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Din Borlänge Taxi now uses &lt;code&gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Daylight remains available at &lt;code&gt;/daylight/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The taxi API uses &lt;code&gt;/taxi-api/api&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The separate API prefix avoids mixing taxi requests with the shared project API at &lt;code&gt;/api&lt;/code&gt;. It also makes the route map easier to reason about: the homepage serves the taxi site, while its backend has its own namespace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the site base and API base separate
&lt;/h2&gt;

&lt;p&gt;There was one subtle bug along the way. The app used a base-path variable both for API requests and for the client-side router. When I changed the API prefix, the router started treating &lt;code&gt;/taxi-api/&lt;/code&gt; as the website’s base route. The page loaded blank.&lt;/p&gt;

&lt;p&gt;The fix was to make those two concepts explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;router base&lt;/strong&gt; controls which website paths the frontend recognizes.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;API base&lt;/strong&gt; controls where form requests are sent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They can look like similar strings, but they have different jobs. Keeping them separate made the app work at the root route while still sending requests to the dedicated API path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify the whole path, not just the build
&lt;/h2&gt;

&lt;p&gt;A successful build doesn’t prove the website is reachable at the intended URL. I checked the frontend build, the API tests, and the API health endpoint. I also opened the actual preview and caught the blank-page routing issue that a build alone would not have revealed.&lt;/p&gt;

&lt;p&gt;That changed my definition of “done.” For a multi-app project, verification should include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does the expected homepage load?&lt;/li&gt;
&lt;li&gt;Do secondary apps still load at their assigned paths?&lt;/li&gt;
&lt;li&gt;Can the frontend reach its API?&lt;/li&gt;
&lt;li&gt;Does the live domain show the intended build after publishing?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At the time of writing, the routing changes work in the project preview. The custom domain needs a new publish to pick up those changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’d improve next
&lt;/h2&gt;

&lt;p&gt;Before relying on the site for real customer requests, I’d finish the owner-side workflow: ensure booking details are properly protected, notify the owner when requests arrive, and give customers clearer inline feedback when a form needs correction.&lt;/p&gt;

&lt;p&gt;The main lesson from this build is simple: a website is not finished when its components render. It is finished when the right site, at the right address, can complete the action the visitor came to take.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>automation</category>
      <category>devops</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
