<?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: Inside GusLift </title>
    <description>The latest articles on DEV Community by Inside GusLift  (@guslift).</description>
    <link>https://dev.to/guslift</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.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F12638%2F6f6ce251-0d18-4416-8492-1deb6bfca511.jpg</url>
      <title>DEV Community: Inside GusLift </title>
      <link>https://dev.to/guslift</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/guslift"/>
    <language>en</language>
    <item>
      <title>Week 6: How GusLift Matches Rides in Real Time</title>
      <dc:creator>Abdul-Salam Zakaria</dc:creator>
      <pubDate>Sun, 15 Mar 2026 13:41:03 +0000</pubDate>
      <link>https://dev.to/guslift/week-6-how-guslift-matches-rides-in-real-time-41pl</link>
      <guid>https://dev.to/guslift/week-6-how-guslift-matches-rides-in-real-time-41pl</guid>
      <description>&lt;p&gt;Every school morning, a few drivers leave their dorms for campus, and a bunch of riders need seats. The core problem: match them fast, in the right direction, before the window closes.&lt;/p&gt;

&lt;p&gt;Here's how the matching engine actually works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Matching Room Abstraction
&lt;/h2&gt;

&lt;p&gt;We don't run one global pool. We partition by location, day, and departure time. A room key looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Westie:mon:08:00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That string becomes the identity of a Cloudflare Durable Object(DO), a live, in-memory process that owns all real-time state for that slot. Everyone heading from Westie at 8am Monday shares one room. Leaving at 10:30? Different room entirely. This keeps each instance small and focused. The matching room doesn't know or care about any other departure window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Into the Right Room
&lt;/h2&gt;

&lt;p&gt;When a user opens the app, a Cloudflare Worker handles the request. It authenticates, resolves the user's schedule, generates the slot key, and forwards the WebSocket connection to the right DO. The Worker is stateless, purely a router. All the interesting state lives in the object it points to.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the DO Tracks
&lt;/h2&gt;

&lt;p&gt;Four things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;drivers&lt;/code&gt; — map of driver ID → seats remaining&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;riders_waiting&lt;/code&gt; — FIFO queue of riders requesting a ride&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pending_matches&lt;/code&gt; — riders a driver has selected but who haven't confirmed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;connections&lt;/code&gt; — live WebSocket handles, one per user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every state change broadcasts to all connected clients. The frontend is a mirror of what the DO holds, nothing more.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flow
&lt;/h2&gt;

&lt;p&gt;Driver goes online → sends &lt;code&gt;driver_online&lt;/code&gt; with seat count → registered in the room, broadcast to everyone. Rider wants a seat → sends &lt;code&gt;rider_request&lt;/code&gt; → added to the queue.&lt;/p&gt;

&lt;p&gt;Driver picks someone. That rider moves out of &lt;code&gt;riders_waiting&lt;/code&gt; into &lt;code&gt;pending_matches&lt;/code&gt; and gets a &lt;code&gt;match_request&lt;/code&gt; pushed to their socket. They have 30 seconds to accept. No response → back to the queue. They accept → seat decrements, ride written to Postgres, room updates for everyone.&lt;/p&gt;

&lt;p&gt;The part that could get hairy is concurrent events — two drivers selecting the same rider at the same time. The DO's single-threaded execution model handles that without any extra locking. One message at a time, in order. It's one of the legitimately nice properties of this architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Durable Objects
&lt;/h2&gt;

&lt;p&gt;Serverless and WebSockets are a bad pairing by default. Serverless assumes requests are stateless and short-lived; a WebSocket is neither. DOs give you a persistent, single-threaded process with in-memory state that survives across events. For a campus app where load is concentrated in a 20-minute morning window, you get rooms that spin up when needed and hibernate when not. No idle infrastructure, no connection hand-off problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Left
&lt;/h2&gt;

&lt;p&gt;A few open problems the current design doesn't address: drivers who cancel after a match is accepted, rooms that never get cleaned up after their departure window passes, and rate limiting on socket events. None of these tasks is difficult in principle. They just weren't the initial challenges.&lt;/p&gt;

</description>
      <category>cloudflare</category>
      <category>infrastructure</category>
      <category>backenddevelopment</category>
      <category>database</category>
    </item>
    <item>
      <title>Week 5: Improving Session Persistence and Planning Cross-Platform Support</title>
      <dc:creator>SundeepShrestha</dc:creator>
      <pubDate>Sat, 07 Mar 2026 00:39:33 +0000</pubDate>
      <link>https://dev.to/guslift/week-5-improving-session-persistence-and-planning-cross-platform-support-9ei</link>
      <guid>https://dev.to/guslift/week-5-improving-session-persistence-and-planning-cross-platform-support-9ei</guid>
      <description>&lt;p&gt;Last week, we introduced GusLift and focused on building the authentication system that allows users to log in using their Google accounts. This week, we continued working on improving how user sessions are handled within the app and started planning how the application will support multiple platforms.&lt;/p&gt;

&lt;p&gt;Our main focus was improving session persistence and thinking about how the platform will eventually run across iOS, Android, and web environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improving User Session Management
&lt;/h2&gt;

&lt;p&gt;One challenge that often appears in mobile applications is how to handle user sessions after authentication. Ideally, users should not have to log in every time they open the app, but at the same time, sessions should not remain active indefinitely for security reasons.&lt;/p&gt;

&lt;p&gt;To address this, we implemented Async Storage to store user session data locally on the device.&lt;/p&gt;

&lt;p&gt;When a user successfully signs in using Google authentication, key information about the session is saved locally. This allows the application to recognize returning users and automatically keep them logged in.&lt;/p&gt;

&lt;p&gt;Currently, sessions are configured to remain active for approximately seven days before requiring the user to authenticate again.&lt;/p&gt;

&lt;p&gt;This approach improves usability while still maintaining a reasonable level of account security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Async Storage Matters
&lt;/h2&gt;

&lt;p&gt;Async Storage allows the app to persist small pieces of information locally on a user’s device.&lt;/p&gt;

&lt;p&gt;In the case of GusLift, it is used to store session-related information so that users can continue using the app without repeatedly signing in.&lt;/p&gt;

&lt;p&gt;Without this feature, every time a user closed and reopened the application, they would need to authenticate again, which would make the experience frustrating.&lt;/p&gt;

&lt;p&gt;By storing session data locally, the app can restore the user's session quickly when the application launches.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frymjuxmshebgb9ax9pkt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frymjuxmshebgb9ax9pkt.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning Cross-Platform Support
&lt;/h2&gt;

&lt;p&gt;Another goal for the GusLift project is ensuring that the application can run across multiple platforms.&lt;/p&gt;

&lt;p&gt;Since the project is being built using React Native with Expo, we have the flexibility to target several environments with a single codebase.&lt;/p&gt;

&lt;p&gt;Our long-term objective is to support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS devices&lt;/li&gt;
&lt;li&gt;Android devices&lt;/li&gt;
&lt;li&gt;Web browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Supporting multiple platforms increases accessibility and allows users to interact with the platform in whichever way is most convenient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Cross-Platform Development Matters
&lt;/h2&gt;

&lt;p&gt;Building separate applications for each platform can significantly increase development time and maintenance complexity.&lt;/p&gt;

&lt;p&gt;Using React Native allows the team to reuse much of the same codebase across different environments, which simplifies development and makes future updates easier to manage.&lt;/p&gt;

&lt;p&gt;This approach also allows us to test features more quickly as the project continues to evolve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;With authentication and session persistence in place, the next stage of development will focus on building the core functionality of the platform.&lt;/p&gt;

&lt;p&gt;Some of the next milestones include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing the ride request workflow&lt;/li&gt;
&lt;li&gt;Implementing driver availability&lt;/li&gt;
&lt;li&gt;Building the ride matching logic&lt;/li&gt;
&lt;li&gt;Improving the user interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As the project progresses, we will continue documenting the development process and technical decisions in these weekly updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The improvements made this week help create a smoother user experience by allowing users to remain logged in while also preparing the application for broader platform support.&lt;/p&gt;

&lt;p&gt;Although the project is still in the early stages, these foundational components will make it easier to build the core ride-sharing functionality in the coming weeks.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>mobile</category>
      <category>security</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Week 4: Understanding what GusLift Is</title>
      <dc:creator>SundeepShrestha</dc:creator>
      <pubDate>Sat, 07 Mar 2026 00:09:31 +0000</pubDate>
      <link>https://dev.to/guslift/week-4-understanding-what-guslift-is-79d</link>
      <guid>https://dev.to/guslift/week-4-understanding-what-guslift-is-79d</guid>
      <description>&lt;p&gt;Many students at Universities or Colleges rely on friends, rideshare services, or campus transportation to get around. While services like Uber and Lyft exist, they are not always practical for short trips around campus or nearby areas.&lt;/p&gt;

&lt;p&gt;For example, a student might need a ride from their dorm to an academic building, a nearby apartment, or a grocery store. In situations like this, requesting a full rideshare service often feels unnecessary or expensive.&lt;/p&gt;

&lt;p&gt;GusLift started as an idea to solve this problem by creating a campus-focused ride-sharing platform designed &lt;strong&gt;specifically for students.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The goal is simple: &lt;strong&gt;Make it easier&lt;/strong&gt; for students to connect with others who are already driving somewhere nearby, while keeping the platform limited to trusted users within the college community.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea Behind GusLift
&lt;/h2&gt;

&lt;p&gt;Unlike traditional ride-sharing apps that are open to anyone, GusLift is designed to be restricted to verified users from the campus community.&lt;/p&gt;

&lt;p&gt;This approach helps create a safer and more trusted environment where students know they are interacting with other members of their school community.&lt;/p&gt;

&lt;p&gt;Instead of requesting rides from strangers, users can connect with other students who are already heading in the same direction.&lt;/p&gt;

&lt;p&gt;The long-term goal is to create a small, efficient transportation network within the campus ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5amc3yluehkszq6pj6uz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5amc3yluehkszq6pj6uz.png" alt=" " width="384" height="587"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7c7byz01mef2znevgwde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7c7byz01mef2znevgwde.png" alt="Early concept for the GusLift interface." width="371" height="675"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Early concept for the GusLift interface.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built So Far
&lt;/h2&gt;

&lt;p&gt;This week, we focused on setting up the authentication system for the application.&lt;/p&gt;

&lt;p&gt;Authentication is an important part of GusLift because the platform needs to ensure that only approved users can access the app.&lt;/p&gt;

&lt;p&gt;To accomplish this, we implemented Google Sign-In.&lt;/p&gt;

&lt;p&gt;This allows users to log into the application using their Google accounts instead of creating new usernames and passwords. Using Google authentication simplifies the login process while also providing a reliable identity verification system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7h6ss8hec47zbteurqyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7h6ss8hec47zbteurqyi.png" alt=" " width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sa31hlbl9l5y3fukve4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sa31hlbl9l5y3fukve4.png" alt="Google authentication is used to verify users during login." width="800" height="179"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Google authentication is used to verify users during login.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping Users Logged In
&lt;/h2&gt;

&lt;p&gt;After implementing login functionality, the next step was making sure users do not have to sign in every time they open the app.&lt;/p&gt;

&lt;p&gt;To solve this, we implemented Async Storage, which allows the application to store small pieces of data directly on the user's device.&lt;/p&gt;

&lt;p&gt;Once a user logs in successfully, their session information is saved locally. This allows the app to recognize returning users and automatically keep them signed in.&lt;/p&gt;

&lt;p&gt;Currently, user sessions are stored for seven days, after which the user will be asked to authenticate again.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;await AsyncStorage.setItem(&lt;br&gt;
        "@user",&lt;br&gt;
        JSON.stringify({ ...data, savedAt: Date.now() })&lt;br&gt;
      );&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This approach improves usability while still maintaining basic security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technologies Used
&lt;/h2&gt;

&lt;p&gt;The current version of GusLift is being built using the following tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native (Expo) for cross-platform mobile development&lt;/li&gt;
&lt;li&gt;Google Authentication for user login &lt;/li&gt;
&lt;li&gt;Async Storage for storing session information locally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools allow us to rapidly prototype features while maintaining flexibility for future expansion.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Comes Next
&lt;/h2&gt;

&lt;p&gt;In the coming weeks, we plan to continue expanding the foundation of the app.&lt;/p&gt;

&lt;p&gt;Some of the next steps include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improving how user sessions are handled within the application&lt;/li&gt;
&lt;li&gt;Expanding support across multiple platforms&lt;/li&gt;
&lt;li&gt;Beginning development of the core ride-sharing functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the long-term goals for the project is to make GusLift available across iOS, Android, and web platforms, allowing users to access the system from different devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;GusLift is still in the early stages of development, but the core authentication system now provides a starting point for building the rest of the platform.&lt;/p&gt;

&lt;p&gt;As development continues, the focus will shift toward building the features that actually enable users to request and offer rides.&lt;/p&gt;

&lt;p&gt;Future posts will document the progress of the project as we continue building and testing new components of the system.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>sideprojects</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
