Skip to content

Commit c5d4e0b

Browse files
authored
Rename the mdparivaar brand to Maanav (#93)
* Rename the mdparivaar brand to Maanav The community moves from mdparivaar.com to maanav.net. This renames the brand throughout: directory, id, slug, scheme, display name, wordmark, and the deep-link host. Both hostname maps are updated together - src/brand/resolve.web.ts for the client, which resolves from window.location.hostname, and the Go mirror in bskyweb/cmd/bskyweb/brand.go, which drives SSR OG/Twitter metadata and the pre-hydration splash colors. They have to agree or a visitor gets one brand's link preview and another brand's page. mdparivaar.com stays mapped to the maanav brand in both. The reverse proxy 301s it to maanav.net so the app should never see it, but if a redirect is ever missed the entries keep the brand correct instead of silently falling back to the default. The Hindi welcome copy, composer prompt, saffron palette, and MD icon are unchanged - the Madhyasth Darshan identity carries over. Only the Go Description string, which surfaces in link-preview cards, is reworded. The wordmark viewBox narrows from 126 to 80 to match the shorter word; `ratio` drives the layout box, so leaving it at 126 would render "Maanav" floating in dead space. Native bundle ids remain TODO placeholders, renamed for consistency. * Update brand resolution test fixtures for the Maanav rename The port-stripping case used mdparivaar.com, which now resolves to the maanav brand via the legacy fallback rather than to a mdparivaar brand that no longer exists. Point it at the canonical maanav.net host, and add an explicit case for the legacy mdparivaar.com -> maanav mapping since that fallback is now load-bearing (the reverse proxy 301s it, but the entry keeps the brand correct if a redirect is ever missed).
1 parent 55c5664 commit c5d4e0b

12 files changed

Lines changed: 87 additions & 63 deletions

File tree

brands/BRAND_SYSTEM.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,15 +256,15 @@ brands/
256256
├── k4m2a/
257257
│ ├── brand.js
258258
│ └── brand.ts
259-
└── mdparivaar/
259+
└── maanav/
260260
├── brand.js
261261
├── brand.ts
262262
└── logoIcon.svg.ts ← extracted SVG string for the MD mark
263263
264264
src/brand/
265265
├── types.ts ← Brand = BrandConfig & {runtime fields}
266266
├── activeBrand.ts ← setActiveBrand / getActiveBrand
267-
├── registry.ts ← bluesky | k4m2a | mdparivaar lookup
267+
├── registry.ts ← bluesky | k4m2a | maanav lookup
268268
├── resolve.ts ← native: process.env.EXPO_PUBLIC_BRAND
269269
├── resolve.web.ts ← web: hostname → brand id
270270
├── boot.ts ← side-effecting; runs in entry points

brands/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ yarn web
1818
# the k4m2a community feed.
1919
EXPO_PUBLIC_BRAND=k4m2a yarn web
2020

21-
# MDParivaar — saffron #CD7233 brand with the Madhyasth Darshan icon. Uses the
22-
# coseeker.org PDS and the mdparivaar community feed.
23-
EXPO_PUBLIC_BRAND=mdparivaar yarn web
21+
# Maanav — saffron #CD7233 brand with the Madhyasth Darshan icon. Uses the
22+
# coseeker.org PDS and the Maanav community feed.
23+
EXPO_PUBLIC_BRAND=maanav yarn web
2424

2525
# CoSeeker — clone of k4m2a's monochrome visuals, served at coseeker.com. Uses
2626
# the coseeker.org PDS and the coseeker community feed.
@@ -31,7 +31,7 @@ The same env var works for native:
3131

3232
```bash
3333
EXPO_PUBLIC_BRAND=k4m2a yarn ios
34-
EXPO_PUBLIC_BRAND=mdparivaar yarn ios
34+
EXPO_PUBLIC_BRAND=maanav yarn ios
3535
```
3636

3737
If `EXPO_PUBLIC_BRAND` is unset, the app falls back to `bluesky`. On web, the

brands/REVIEW_FOLLOWUPS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pre-hydration favicon needs per-brand favicon assets in `static/`.
4040
## 3. Large brand SVGs eagerly imported into every bundle
4141

4242
`src/brand/registry.ts` statically imports all four brands.
43-
`brands/shared/earthMark.svg.ts` is ~2.17 MB and `mdparivaar/logoIcon.svg.ts`
43+
`brands/shared/earthMark.svg.ts` is ~2.17 MB and `maanav/logoIcon.svg.ts`
4444
is ~118 KB, so every deployment - including the native single-tenant build
4545
where the brand is fixed at compile time - ships ~2.3 MB of SVG it never
4646
renders. `SvgXml` also re-parses these strings on every render of the tab
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,40 @@
11
// @ts-check
22
/**
3-
* MDParivaar brand — Madhyasth Darshan community.
3+
* Maanav brand — Madhyasth Darshan community.
44
* Visual brand: saffron `#CD7233` from the MD icon SVG, monochrome
55
* white-on-saffron mark.
66
*
77
* @type {import('../types').BrandConfig}
88
*/
99
const brand = {
10-
id: 'mdparivaar',
11-
name: 'MDParivaar',
12-
slug: 'mdparivaar',
13-
scheme: 'mdparivaar',
14-
spokenName: 'M D Parivaar',
10+
id: 'maanav',
11+
name: 'Maanav',
12+
slug: 'maanav',
13+
scheme: 'maanav',
14+
spokenName: 'Maanav',
1515
// TODO: real EAS owner once the build is wired up
1616
owner: 'TODO-eas-owner',
1717
// TODO: register a unique iOS bundle id and Android package
18-
bundleId: 'TODO.mdparivaar.app',
19-
androidPackage: 'TODO.mdparivaar.app',
20-
iosAppGroup: 'group.TODO.mdparivaar',
18+
bundleId: 'TODO.maanav.app',
19+
androidPackage: 'TODO.maanav.app',
20+
iosAppGroup: 'group.TODO.maanav',
2121
// Saffron primary (sampled from the icon background); splash matches the
2222
// logo's white-on-saffron design.
2323
primaryColor: '#CD7233',
2424
splashColor: '#FFFFFF',
2525
splashColorDark: '#150D0A',
2626
// Deep-link / universal-link host
27-
webHost: 'mdparivaar.com',
27+
webHost: 'maanav.net',
2828
associatedDomains: [
29-
// TODO: 'applinks:TODO.mdparivaar.example',
29+
// TODO: 'applinks:TODO.maanav.example',
3030
],
3131
contactsPermission:
32-
'I agree to allow MDParivaar to use my contacts for friend discovery until I opt out.',
32+
'I agree to allow Maanav to use my contacts for friend discovery until I opt out.',
3333
appExtensions: [
3434
// TODO: include the share extension once the native target exists.
3535
// {
36-
// targetName: 'Share-with-MDParivaar',
37-
// bundleSuffix: 'Share-with-MDParivaar',
36+
// targetName: 'Share-with-Maanav',
37+
// bundleSuffix: 'Share-with-Maanav',
3838
// includeAppGroupEntitlement: true,
3939
// },
4040
],
Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ import nativeConfig from './brand.js'
99
import {MD_ICON_SVG} from './logoIcon.svg'
1010

1111
/**
12-
* MDParivaar runtime brand. Accounts live on the self-hosted PDS at
12+
* Maanav runtime brand. Accounts live on the self-hosted PDS at
1313
* coseeker.org; reads still go through bluesky's public appview. The
1414
* `defaultFeeds`, `appAccountDid`, `links`, and `blogUrls` fields still
15-
* reference bluesky-owned resources — swap them for MDParivaar-owned
15+
* reference bluesky-owned resources — swap them for Maanav-owned
1616
* values as those become available.
1717
*
1818
* To activate locally:
19-
* EXPO_PUBLIC_BRAND=mdparivaar yarn web
20-
* EXPO_PUBLIC_BRAND=mdparivaar yarn ios
19+
* EXPO_PUBLIC_BRAND=maanav yarn web
20+
* EXPO_PUBLIC_BRAND=maanav yarn ios
2121
*/
2222

2323
// Saffron primary ramp anchored on the brand's `#CD7233` (sampled from the
2424
// icon SVG). primary_500 is what most "primary" UI elements render with;
2525
// hover/press use 600/700, surfaces use 25-100.
26-
const MDPARIVAAR_PRIMARY_RAMP = {
26+
const MAANAV_PRIMARY_RAMP = {
2727
primary_25: '#FDF6F0',
2828
primary_50: '#FAEAD9',
2929
primary_100: '#F5D2B0',
@@ -39,7 +39,7 @@ const MDPARIVAAR_PRIMARY_RAMP = {
3939
primary_975: '#241208',
4040
}
4141

42-
const MDPARIVAAR_CONTRASTS = {
42+
const MAANAV_CONTRASTS = {
4343
// Only override high contrast values (700-1000) for custom dark-mode warm-brown backgrounds and surfaces
4444
contrast_700: '#B19688', // Premium warm sandstone text/icons
4545
contrast_800: '#423028', // Active elements
@@ -49,7 +49,7 @@ const MDPARIVAAR_CONTRASTS = {
4949
contrast_1000: '#150D0A', // Deep near-black warm cocoa background for dark mode (instead of #000000)
5050
}
5151

52-
const MDPARIVAAR_SUBDUED_CONTRASTS = {
52+
const MAANAV_SUBDUED_CONTRASTS = {
5353
// Subdued overrides for custom dim-mode warm-brown backgrounds and surfaces
5454
contrast_700: '#C5A898', // Soft sandstone text/icons
5555
contrast_800: '#543E33', // Active elements
@@ -59,16 +59,16 @@ const MDPARIVAAR_SUBDUED_CONTRASTS = {
5959
contrast_1000: '#1E1410', // Comfortable warm dim cocoa background for dim mode (instead of #151D28)
6060
}
6161

62-
const mdparivaarPalette = {
62+
const maanavPalette = {
6363
...DEFAULT_PALETTE,
64-
...MDPARIVAAR_PRIMARY_RAMP,
65-
...MDPARIVAAR_CONTRASTS,
64+
...MAANAV_PRIMARY_RAMP,
65+
...MAANAV_CONTRASTS,
6666
}
6767

68-
const mdparivaarSubduedPalette = {
68+
const maanavSubduedPalette = {
6969
...DEFAULT_SUBDUED_PALETTE,
70-
...MDPARIVAAR_PRIMARY_RAMP,
71-
...MDPARIVAAR_SUBDUED_CONTRASTS,
70+
...MAANAV_PRIMARY_RAMP,
71+
...MAANAV_SUBDUED_CONTRASTS,
7272
}
7373

7474
// The MD icon is a self-contained design (white-on-saffron). Rendered via
@@ -79,14 +79,19 @@ const MD_ICON_SHAPE = {
7979
ratio: 1, // viewBox is 180x180
8080
}
8181

82-
// Custom wordmark SVG for "MD Parivaar" text.
83-
const MD_WORDMARK_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 126 24">
84-
<text x="50%" y="18" font-family="-apple-system, BlinkMacSystemFont, 'Outfit', 'Inter', sans-serif" font-weight="900" font-size="20" fill="currentColor" text-anchor="middle">MD Parivaar</text>
82+
/*
83+
* Custom wordmark SVG for "Maanav" text. The viewBox width is sized to the
84+
* rendered glyph run so the wordmark's aspect ratio matches its ink - too
85+
* wide and the mark floats in dead space, since `ratio` drives the layout
86+
* box the wordmark is fitted into.
87+
*/
88+
const MAANAV_WORDMARK_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 24">
89+
<text x="50%" y="18" font-family="-apple-system, BlinkMacSystemFont, 'Outfit', 'Inter', sans-serif" font-weight="900" font-size="20" fill="currentColor" text-anchor="middle">Maanav</text>
8590
</svg>`
8691

87-
const MD_WORDMARK_SHAPE = {
88-
xml: MD_WORDMARK_SVG,
89-
ratio: 24 / 126,
92+
const MAANAV_WORDMARK_SHAPE = {
93+
xml: MAANAV_WORDMARK_SVG,
94+
ratio: 24 / 80,
9095
}
9196

9297
const brand: Brand = {
@@ -118,7 +123,7 @@ const brand: Brand = {
118123
],
119124

120125
links: {
121-
// Brand-page links default to coseeker.org (mdparivaar accounts live on the
126+
// Brand-page links default to coseeker.org (maanav accounts live on the
122127
// coseeker.org PDS). Infra links stay on the shared Bluesky AppView.
123128
...DEFAULT_BRAND_PAGE_LINKS,
124129
statusPage: 'https://status.bsky.app/',
@@ -147,13 +152,13 @@ const brand: Brand = {
147152
},
148153

149154
palette: {
150-
default: mdparivaarPalette,
151-
subdued: mdparivaarSubduedPalette,
155+
default: maanavPalette,
156+
subdued: maanavSubduedPalette,
152157
},
153158

154159
logo: {
155160
mark: MD_ICON_SHAPE,
156-
wordmark: MD_WORDMARK_SHAPE,
161+
wordmark: MAANAV_WORDMARK_SHAPE,
157162
logomark: MD_ICON_SHAPE,
158163
},
159164

brands/shared/links.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*/
88
/**
99
* Where the "Request Invite Code" CTA in the web welcome modal points. Shared
10-
* by the invite-only community brands (coseeker, k4m2a, mdparivaar); Bluesky
10+
* by the invite-only community brands (coseeker, k4m2a, maanav); Bluesky
1111
* does not use it (open signup). See `welcomeModal` in `src/brand/types.ts`.
1212
*/
1313
export const BRAND_INVITE_REQUEST_URL = 'https://forms.gle/Kob45PoNdLo2NrWm8'

bskyweb/cmd/bskyweb/brand.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ var brands = map[string]Brand{
6262
BgDim: "#121212",
6363
PrimaryColor: "#000000",
6464
},
65-
"mdparivaar": {
66-
ID: "mdparivaar",
67-
Name: "MDParivaar",
68-
SiteName: "MDParivaar",
69-
Description: "Madhyasth Darshan community on MDParivaar.",
70-
CanonicalHost: "mdparivaar.com",
65+
"maanav": {
66+
ID: "maanav",
67+
Name: "Maanav",
68+
SiteName: "Maanav",
69+
Description: "Madhyasth Darshan community on Maanav.",
70+
CanonicalHost: "maanav.net",
7171
BgLight: "#FFFFFF",
7272
BgDark: "#150D0A",
7373
BgDim: "#1E1410",
@@ -91,10 +91,16 @@ var brands = map[string]Brand{
9191
// production hostnames come online. Anything not listed falls back to the
9292
// default brand.
9393
var hostnameToBrandID = map[string]string{
94-
"k4m2a.app": "k4m2a",
95-
"www.k4m2a.app": "k4m2a",
96-
"mdparivaar.com": "mdparivaar",
97-
"www.mdparivaar.com": "mdparivaar",
94+
"k4m2a.app": "k4m2a",
95+
"www.k4m2a.app": "k4m2a",
96+
"maanav.net": "maanav",
97+
"www.maanav.net": "maanav",
98+
// Legacy hosts from before the Maanav rename. The reverse proxy 301s
99+
// these to maanav.net, so the app should never see them; these entries
100+
// only keep the brand correct if a redirect is ever missed, rather than
101+
// silently falling back to the default brand.
102+
"mdparivaar.com": "maanav",
103+
"www.mdparivaar.com": "maanav",
98104
"coseeker.com": "coseeker",
99105
"www.coseeker.com": "coseeker",
100106
}

bskyweb/cmd/bskyweb/brand_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,13 @@ func TestResolveBrand(t *testing.T) {
149149
},
150150
{
151151
name: "port is stripped",
152-
host: "mdparivaar.com:8100",
153-
want: "mdparivaar",
152+
host: "maanav.net:8100",
153+
want: "maanav",
154+
},
155+
{
156+
name: "legacy host resolves to the renamed brand",
157+
host: "mdparivaar.com",
158+
want: "maanav",
154159
},
155160
{
156161
name: "host is lowercased",

src/brand/registry.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import bluesky from '../../brands/bluesky/brand'
22
import coseeker from '../../brands/coseeker/brand'
33
import k4m2a from '../../brands/k4m2a/brand'
4-
import mdparivaar from '../../brands/mdparivaar/brand'
4+
import maanav from '../../brands/maanav/brand'
55
import {type Brand} from './types'
66

77
/**
@@ -12,7 +12,7 @@ export const brands: Record<string, Brand> = {
1212
bluesky,
1313
coseeker,
1414
k4m2a,
15-
mdparivaar,
15+
maanav,
1616
}
1717

1818
/**

0 commit comments

Comments
 (0)