Skip to content
··5 मिनट पढ़ने का समय

Blank Screens Trust तोड़ती हैं। मेरे पास 31 थीं।

मुझे अपने SaaS में 31 blank screens मिलीं—सब इसलिए क्योंकि मैं भूल गया कि multi-tenancy सिर्फ data access नहीं, URL context भी है। यहाँ बताता हूँ कैसे Claude Code ने एक रात में सब ठीक करने में मदद की।

1 नवंबर, सुबह 8:47 बजे। मुझे email आई।

"Hey Chandler - मैंने 'View' पर click किया और blank page आ गया। क्या मेरा सारा interview data खो गया?"

मेरा पेट गिर गया। Blank pages bugs नहीं हैं। वे trust killers हैं।

मैंने dev console खोला। Route check किया। Agency user, client "Acme Corp" देख रहा, एक button click किया, और... URL `/clients/acme-corp/agents/agent-name/results/123` से बदलकर बस `/agent-name/results/123` हो गया।

Client context खो गया। React Router route नहीं ढूंढ पाया। Blank screen।

"ठीक है, एक bug है," मैंने सोचा। "Fix कर दूँगा और आगे बढ़ूँगा।"

मैंने Claude Code को codebase analyze करने लगाया similar patterns के लिए, फिर Saturday परिवार के साथ बिताया। Lunch। काम। बच्चे। हमेशा की तरह।

शाम तक, मैंने वापस check किया। Claude Code ने pattern ढूंढ लिया था — और यह अच्छा नहीं था।

शाम 7:42 तक, मैंने 14 bugs fix कीं। 7:48 तक, 8 और मिलीं। 7:56 तक, count 31 total हो गया।

सब एक ही root cause। सब एक ही fix। सब इसलिए क्योंकि मैं multi-tenancy बनाते समय एक बात भूल गया: navigation सिर्फ data के बारे में नहीं, context के बारे में है।

---

वास्तव में कितना बुरा था?

ईमानदार रहता हूँ कि इन 31 bugs का क्या मतलब था:

Users के लिए:

- Agency users को blank screens दिख रही थीं (broken लगता था, buggy नहीं)

- Mid-session workflow progress खो जाता

- "क्या यह platform हमारे clients के लिए काफी stable है?"

- हर blank screen = trial cancel करने की तरफ एक कदम

मेरे लिए:

- रोज़ 5+ bug reports (सब navigation-related)

- हर एक को individually debug करने में 2-3 घंटे

- नए features ship नहीं कर पा रहा (firefighting में busy)

- असली डर: "अगर कुछ और भी तोड़ दिया और पता नहीं?"

अस्तित्व का सवाल: अगर मैं navigation भी ठीक से काम नहीं करा पाता, तो कोई STRAŦUM पर अपने clients की marketing strategy क्यों trust करे?

Blank screens trust को किसी भी चीज़ से तेज़ तोड़ती हैं।

---

Fix: Context-Aware Navigation

हर component में `useParams()` के बजाय, मैंने Claude Code से एक Context provider बनवाया:

```typescript
// contexts/ClientContext.tsx
import { createContext, useContext } from 'react';
import { useParams } from 'react-router-dom';

interface ClientContextValue {
  clientSlug: string | null;
}

const ClientContext = createContext<ClientContextValue | null>(null);

export function ClientContextProvider({ children }: { children: React.ReactNode }) {
  const { clientSlug } = useParams<{ clientSlug: string }>();

  return (
    <ClientContext.Provider value={{ clientSlug: clientSlug || null }}>
      {children}
    </ClientContext.Provider>
  );
}

export function useClientContext() {
  const context = useContext(ClientContext);
  if (!context) {
    throw new Error('useClientContext must be used within ClientContextProvider');
  }
  return context;
}
```

Routing helper (क्योंकि same if/else 20 बार type करना पुराना पड़ जाता है):

```typescript
// hooks/useContextRoute.ts
import { useClientContext } from '@/contexts/ClientContext';

export function useContextRoute() {
  const { clientSlug } = useClientContext();

  const buildRoute = (route: string) => {
    if (clientSlug) {
      const cleanRoute = route.startsWith('/') ? route.slice(1) : route;
      return `/clients/${clientSlug}/${cleanRoute}`;
    }
    return route;
  };

  return { buildRoute, clientSlug };
}
```

एक helper function। Context-aware। दोनों user types के लिए काम करता है।

---

Systematic Fix: एक दिन, 31 Files

Pattern मिलने के बाद, यह mechanical हो गया।

1 नवंबर, 2025 - The Sprint

शाम 7:42 - पहली wave (14 bugs):

```
fix(multi-tenant): fix 14 navigation bugs and refactor all agents to useClientContext()

Files changed: 14
Insertions: +732
Deletions: -164
```

शाम 7:48 - दूसरी wave (8 और bugs):

```
fix(multi-tenant): fix 8 navigation bugs in strategy page

Files changed: 1
Insertions: +71
Deletions: -23
```

शाम 7:56 - आखिरी wave (9 और bugs):

```
fix(multi-tenant): fix 9 navigation bugs in interview and tool pages

Files changed: 2
Insertions: +46
Deletions: -10
```

कुल नुकसान: 17 files changed, 849 insertions, 197 deletions।

समय लगा: Claude Code के साथ करीब 6 घंटे non-continuous work।

बचाया गया समय: शायद 30+ घंटे individual bug fixes और user support।

---

क्या सीखा (कठिन तरीके से)

1. Multi-tenant navigation data isolation से कठिन है

आप data `org_id` से filter कर सकते हैं। यह आसान हिस्सा है।

लेकिन navigation? एक ही feature के लिए दो valid URL structures हैं:

```
SME:    /agent-name/session/123
Agency: /clients/acme-corp/agents/agent-name/session/123
```

हर `navigate()` call को जानना होगा कौन सा pattern इस्तेमाल करना है।

2. useParams() झूठ बोलता है

React Context झूठ नहीं बोलता। यह हमेशा available है, हमेशा consistent।

3. Victory claim करने से पहले हर bug गिनो

मुझे लगा 14 bugs हैं। फिर 8 और मिलीं। फिर 9 और।

सबक: पूरे codebase में Grep करो, सिर्फ उन files में नहीं जिनमें bugs लगता है।

4. जब एक ही bug दो बार मिले, रुको और pattern बनाओ

Individual fixing: 31 bugs = शायद एक हफ्ता

Systematic fixing: Pattern ढूंढो → Helper बनाओ → सब instances fix करो = 6 घंटे

5. Navigation bugs अस्तित्व के लिए खतरा हैं

Users को आपकी RLS policies या multi-tenant architecture की परवाह नहीं। उन्हें परवाह है कि "View Results" click करने पर results दिखें। यही gap "technically works" और "actually finished" के बीच फिर दिखा जब मैंने AI से native iOS app बनाया — Claude Code ने scaffold तेज़ generate किया, लेकिन वो polish जो users को product पर trust दिलाती है? वो 40% सिर्फ इंसान deliver कर सकते हैं।

---

Results

1 नवंबर से पहले:

- 31 navigation bugs छिपी हुईं

- रोज़ 5+ bug reports

- Agency users platform stability पर सवाल कर रहे

1 नवंबर के बाद:

- 0 navigation bugs

- 0 navigation-related support tickets

- Future development के लिए pattern established

6 घंटे जो मैंने इन bugs fix करने में बिताए, reduced support burden और restored user confidence में 10× pay back हुए।

---

सबसे दर्दनाक bug क्या है जो आपने real users को ship की — वो जिसके बारे में आपको किसी ने बताकर पता चला? मुझे सच में सुनना अच्छा लगेगा।

शुभकामनाओं सहित,

Chandler

STRAŦUM architecture series: यह navigation crisis एक बड़ी multi-tenancy journey का हिस्सा था। शुरुआत हुई Day 2 पर multi-tenancy बनाने से, बढ़ा जब Day 67 पर पूरा schema rebuild करना पड़ा, और निष्कर्ष निकला जब पता चला कि database correct लेकिन 296x too slow था।

---

*अभी भी coding, अभी भी learning, अभी भी 31 के groups में bugs ढूंढ रहा हूँ।*

---

P.S. - जिस user ने पहला bug report किया? उनका interview data खोया नहीं था। Database में safe था। बस route टूटने से देख नहीं पा रहे थे। जब मैंने शाम 7:42 बजे fix किया, उनका सारा काम वहीं था। उस छोटी राहत ने 6 घंटे worth बना दिए।

---

पढ़ना जारी रखें

मेरा सफ़र
जुड़ें
भाषा
सेटिंग्स