84 g a day, not "1–2 cups"
Tell us the weight and we work the portion out for that food, and show the arithmetic. A 12 kg bag then has a date on it, not a guess.
Dog & cat · opening in Bengaluru
Six things we refuse to sell, published before we sell you anything. Here is one we turned down.
Drag to part the coat
Ingredients panel · adult dry dog food
Two adult dry foods offered to us the same week — same price bracket, chicken on the front of both bags. Same six tests, both results published.
Open any test to see both answers at once
That is the entire product. A short list of things we will not stock, applied to everything, with the reasoning attached.
Read all sixWorking out how much your dog should actually eat, and remembering when the tick treatment is due.
Tell us the weight and we work the portion out for that food, and show the arithmetic. A 12 kg bag then has a date on it, not a guess.
Vaccination, deworming and tick cycles, timed from what you last recorded. Not a newsletter — a date for your animal.
Record chicken once and every chicken product in the shop carries a warning. You decide anyway — we just stop you finding out at home.
We are not open yet. The guides are free and start now.
Join the waitlistThe standard · version 0.1 · draft
Six things we exclude from every food, treat and supplement we stock. Named, with the reason, so you can hold us to it.
This is a draft. The exclusions below are illustrative and are not yet signed by a veterinarian or reviewed by a lawyer. Both are required before this page goes live — publishing an unsigned standard would undermine the one thing the brand is built on.
"Meat meal", "animal fat", "poultry by-product" — ingredients that do not name the animal they came from.
Why: an unnamed protein source cannot be traced, cannot be checked against an allergy, and cannot be compared batch to batch. If a maker will not say which animal it is, we cannot tell you either.
Added dyes of any kind, including those used only to make kibble look like meat or vegetables.
Why: colour in pet food exists for the person buying it, not the animal eating it. An ingredient with no benefit has no argument for being there.
Synthetic antioxidant preservatives. We stock products preserved with tocopherols (vitamin E) or rosemary extract instead.
Why: naturally preserved food has a shorter shelf life, which is a cost the maker carries rather than the animal. We would rather buy more often.
Sucrose, corn syrup, molasses and artificial sweeteners added for palatability.
Why: sweeteners make food more appealing without making it better. They are a way of solving a formulation problem at the animal's expense.
Products where cheap bulk carbohydrate leads the ingredient list ahead of a named protein.
Why: the first ingredients are most of the food. A named meat should lead a carnivore's diet — this is about proportion, not about grain being inherently bad.
"Natural flavour", "vegetable protein extract" and similar terms that conceal what is actually in the product.
Why: a pet parent managing an allergy needs a complete list. A vague term makes that impossible, and the animal pays for the ambiguity.
We publish what we reject too — practices and ingredients, never competitor brand names.
Tell me when you openThe shelf
The whole list, live. Every item here cleared the standard — the ones that didn’t are not on this page, and never were.
You cannot buy here, on purpose. This page is the shelf and the reasoning; the basket lives in the app. Splitting them keeps this site a place to decide rather than a place to be sold to.
Every product carries the written reason it is stocked. That reasoning is the product.
Join the waitlistGuides · free, no account
Everything we've worked out, written down. Start with the one every pet parent in India gets wrong.
Start here · 6 min
It is the single most common vague term on an Indian pet food label, it is legal, and it tells you almost nothing. Here is how to read past it in about a minute per bag — and why "chicken meal" and "meat meal" are not the same claim at all.
See why we exclude itNothing here yet for that combination.
New guides go out weekly. The waitlist gets them first, before anything is for sale.
Join the waitlistWhy we started
Marshall came first and never left — the soul dog, the one you get once. Toffee we rescued. Two double coats in an Indian summer, and the reason we started reading labels in the first place.
Here from the first day, and the reason for all of it
He was never a decision. He arrived, and the house rearranged itself around him, and nine years later it still has not rearranged back.
People say soul dog and it sounds like something off a card. It is not. It means one animal teaches you what paying attention looks like, and you spend the rest of your life owing that to every animal after.
A long coat built for a German winter, living through a Bengaluru April. Brushed out daily from February, kept out of the afternoon, and fed for joints that carry a lot of dog. Most of what we know about coats, we learned on him.
She needed somewhere to go, and this was it
A husky in south India is somebody’s idea that stopped being fun. By the time she reached us she had already been handed on more than once.
She took a while to believe the food would keep arriving. That is the part nobody photographs — the weeks of a dog checking, every single day, whether this one holds.
Shade, water she will actually drink, and a coat nobody is ever allowed to shave. Meals at the same hour, because predictability did more for her than any supplement we tried.
Two heavy double-coated dogs in a hot country means we spend a lot of the year thinking about coats, diet and what actually goes into a bag of food. That is not a marketing premise. It is why the company exists.
They appear here as themselves — named, with their own story. They are not the logo and they never will be.
These are drawn, not photographed. Each dog is rendered from their own markings — Marshall's black mask and tan cheeks, Toffee's dark cap and blaze — so the page works before a photo shoot exists.
Real photographs beat them instantly, and are one command away. Save the originals
as brand/photos/marshall.jpg and brand/photos/toffee.jpg, run
python3 tools/embed_photos.py, and republish. The photos are downscaled and
embedded as data URIs, because a published artifact cannot load an image from anywhere else.
The drawn portraits stay as the fallback.
They also test everything first, which is less rigorous than it sounds but more honest than most.
Join the waitlistWaitlist
Bengaluru first, with pan-India shipping. The waitlist gets the guides now and the shop first.
This is a design prototype. The form is not connected to anything — nothing is sent, stored, or transmitted. The real version captures email, city, pet, source attribution and explicit consent, per FR‑M10 and FR‑M11.
For the team
Structure, and what the fur-heavy treatment costs. Reachable from the footer, deliberately outside the customer-facing navigation.
The first version opened with three abstract claims and a three-column proof strip. Both were assertions: "we publish what we exclude" is the brand telling you it is trustworthy. They have been replaced by a label reader — a real ingredients panel with the failures marked and the reason attached. Same argument, shown instead of stated, and it doubles as the clearest possible preview of the product.
Home, The Standard, Guides, Our Dogs — plus a persistent Join action styled as a button rather than a nav item, because it is a task and not a place. No second level, no dropdowns, no breadcrumbs; a site this size does not earn one.
Nav order encodes priority and the standard is the entire proposition.
Every view ends with exactly one call to action — always the waitlist. Secondary links are outlined rather than filled so the two never compete. Two equal buttons is the most common way a page converts nothing.
The label reader shows six flags but only one reason at a time. The standard shows six named exclusions with the reasoning folded away. Full transparency presented all at once is less readable, and unreadable transparency persuades nobody.
Each dog is drawn from their own coat colours and markings — mask, saddle, eye colour — rather than being random fur. It exists so the page works before photography does, and so the same component can render a customer's pet from the coat field FR‑R11 adds. It is a placeholder for real photographs, not a substitute for them.
Two earlier attempts failed the same way. Both leaned on a solid base wash to fake density — and a fill is a background image. No quantity of strokes drawn on top of one will read as fur, because the eye sees the flat block first.
There is no fill now. Density comes from the only place it can: hundreds of thousands of individual overlapping strands, up to 420,000 depending on the size of your window. That is far too many to redraw sixty times a second, so the field is rendered once — progressively, over several frames, which is why the coat visibly thickens as the page settles — and then warped. The coat is blitted as a grid of tiles, each pushed by a spring displacement field.
So dragging moves every strand rather than a sparse top layer, and the gaps that open expose the pale undercoat beneath. That is what parting real fur looks like, and it is the brand thesis performed rather than described: the layer you only see when you part the fur.
The coat waves. A baked image cannot, so one strand in five is left out of the bake and redrawn every frame — a slow travelling wave, plus whatever your hand is doing. Roots stay pinned; only tips move, which is the one property that separates hair from cloth.
Under prefers-reduced-motion the field builds in one pass, the wave is
switched off, and nothing animates or responds.
The brand system says motion is a response and FR‑R6 forbids ambient animation outright. A continuously waving coat is exactly that, and it is here because the reference for this hero was a stock clip of real fur moving in slow motion.
It is defensible in one place only — this hero, above the fold, where the job is to establish what the brand is made of. It is not defensible on a product page, in the app, or behind the standard. If it stays, R2 needs an explicit carve-out naming the hero, rather than being quietly ignored.
The clip is licensed Shutterstock footage, and the downloaded file is the watermarked preview. None of it is embedded here and none of it should be: the fur on this page is generated, so it is ours, it is about 40 KB of code rather than megabytes of video, it recolours with the palette, and it responds to the cursor — which footage cannot.
If the real clip is wanted, it has to be licensed first. Same call we made on the tick illustration.
This variant deliberately exceeds the dosage ceilings in §07 of the brand
document, and by a lot. Grain runs at 13% in light and 20% in dark
against a documented ceiling of 5% — roughly three to four times
— plus a full-bleed live coat, shed bands between sections, and coat-filled card headers.
The texture is also drawn differently. Earlier passes grew long strands up from the bottom edge, which reads as a crop field rather than a coat. Fur is short, dense, overlapping, and lies along a direction that drifts across the surface, so strokes are now scattered across the whole area and angled by a smooth flow field over a base wash.
Two consequences worth being explicit about:
To revert: git revert the commit, or set --grain-op back to
.05 and drop the .coat-hero and .band blocks.