From Problem to Product: How I Built Time Port in 7 Days

Aman janwaniAman janwani
4 min read

Introduction

Every product starts with a tiny annoyance.

For me, it was bio links — those little URLs in your Twitter, Instagram, or LinkedIn bio. I realized they were always pointing to one static destination, no matter who was clicking, when they were clicking, or from where.

I thought: "What if a single link could behave differently based on time, day, or region?"

That question led to Time Port — a smart bio link tool that dynamically redirects users depending on real-world context.

This post is a behind-the-scenes, technical deep dive into how I built Time Port in just 7 days as part of my "1 Product a Week" YouTube challenge.


Bio links are simple, but they’re also dumb. You get one destination for everyone.

That’s fine if your audience is local, or you only promote one thing. But if you're a:

  • Creator sharing different content throughout the day

  • Marketer running geo-targeted campaigns

  • Founder launching different products on different days

... then one static link becomes a bottleneck.

Manually switching links? Clunky.
Using a link tree? Static and impersonal.

I needed a context-aware bio link that could auto-update its behavior based on who was clicking and when.


Core Concept: What is Time Port?

Time Port is a smart redirector.

It lets users create a single link (called a Port) that contains multiple rules. These rules tell Time Port how to redirect based on:

  • ⏰ Time of Day (e.g. morning vs night)

  • 📅 Day of the Week (weekday vs weekend)

  • 🌍 Region (country-level detection)

Each Port has a default destination, and then a rule engine that overrides it when conditions are met.


Tech Stack Overview

I knew the stack needed to be:

  • Edge-first

  • Real-time

  • Developer-friendly

  • Globally fast

Here’s what I chose:

Frontend: Next.js + TailwindCSS
Backend/DB: Supabase (Postgres + Auth + Edge Functions)
Redirection Layer: Vercel Edge Middleware
Geo Detection: req.geo from Vercel Edge runtime
Auth: Clerk (session management + sign-in)


Building the Port Creation Flow

Each user logs in via Clerk. Once authenticated, they can:

  1. Create a new Port with a default destination URL

  2. Add any number of redirect rules

  3. Set conditions like region, time range, and days

These rules are stored in Supabase, tied to the user’s UID.

The UI is a simple, clean dashboard built in Next.js, with conditional forms and dropdowns to make rule creation easy.


The Rule Engine (How Redirection Works)

Here’s the fun part.

When someone visits a Time Port link, Vercel Edge Middleware intercepts the request. The middleware fetches:

  • The rule list from Supabase (via Edge Function)

  • The user's current region via req.geo

  • The current time and day via server-side JS

Example logic (pseudo-code):

if (geo === 'IN' && isWeekend()) {
  return redirectTo('/india-weekend-offer');
} else if (isMorning() && geo === 'US') {
  return redirectTo('/us-morning-landing');
} else {
  return redirectTo(defaultDestination);
}

Rules are prioritized by order of creation (or priority weights in future versions).


Click Tracking & Analytics

I implemented basic click tracking using Supabase Edge Functions:

  • When a redirect happens, the function logs the timestamp, region, and matched rule

  • Future updates will include dashboards, graphs, and CTR breakdowns

No client-side JS. All tracking is handled server-side to keep links blazing fast and privacy-respecting.


Geo Detection Challenges

Getting region detection to work quickly and accurately was tough:

  • req.geo works great on Vercel Edge but only gives country-level granularity

  • I experimented with IP-based services, but they added latency and privacy concerns

For now, I stuck with fast, country-level routing. Future versions might add city-level or language-based rules.


What I Learned

  1. Edge-first design forces you to rethink logic flow — and it's worth it

  2. Rule evaluation needs to be both predictable and performant

  3. Supabase Edge Functions are powerful but require careful error handling at scale

  4. Developer onboarding should be instant — I used Clerk to keep auth frictionless


What’s Next

Time Port is live now and already getting love from indie hackers, creators, and early adopters:

Live App 👉 https://timeport.nrbuilt.live
Product Hunt 👉 https://www.producthunt.com/products/time-port
Build Challenge on YouTube 👉 https://www.youtube.com/@amanjanwani1486

Coming soon:

  • Detailed analytics dashboards

  • A/B testing engine

  • Team accounts & sharing

  • Rule presets for common use cases


Final Thoughts

This project started as a simple “what if...” and turned into a shipping masterclass. Time Port is more than just a smart link — it’s a step toward content that adapts in real time.

If you’ve ever felt limited by one static link, I hope Time Port makes your life a little smarter.

Thanks for reading 🙌

— Aman

0
Subscribe to my newsletter

Read articles from Aman janwani directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Aman janwani
Aman janwani

I am a web developer, student, and writer.