Share a post about the neighbourhood store you never really left. A people-first campaign by Pick at Store.
SocialTypeScript · CSSGitHub @Pickatstore3107OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A people-first campaign by Pick at Store: share a memory of a neighbourhood
store, pin it to the map of India, and pass the memory on.
• Next.js (App Router, TypeScript, Tailwind CSS), deployed on Vercel while we build
• Firebase: Authentication (Google) and Cloud Firestore, on the free Spark plan
• Cloudinary (free plan) for story photos, private until approved, through src/app/api/photos
• Firebase projects: pas-dev-7786f (dev, default) and pas-prod-c8190 (prod)
Requires Node 22+ and Java 21+ (for the Firebase emulators).Read the full README ↗A people-first campaign by Pick at Store: share a memory of a neighbourhood store, pin it to the map of India, and pass the memory on.
Product and build plan: https://claude.ai/code/artifact/d75832d4-2701-4e44-9837-514ab263cf98
src/app/api/photospas-dev-7786f (dev, default) and pas-prod-c8190 (prod)Requires Node 22+ and Java 21+ (for the Firebase emulators).
npm install
cp .env.example .env.local # fill in the dev web app config
npm run dev # http://localhost:3000
To work fully offline against local Firebase, set
NEXT_PUBLIC_USE_FIREBASE_EMULATORS=true in .env.local and run
npm run emulators in a second terminal (UI at http://localhost:4000).
| Command | What it does |
|---|---|
npm run lint | ESLint |
npm run typecheck | TypeScript, with Next.js route types |
npm run test:rules | Firestore and Storage security rules tests on the emulators |
npm run build | Production build |
All four run in GitHub Actions on every pull request.
Every story waits for a moderator at /moderate before anyone else can see it.
The app can't make anyone a moderator; that is done by hand in the Firebase
console:
/moderate and copies the code it shows.moderators
collection (choose Start collection the first time).name holding their name.Every decision is written to moderationLog, which nobody can edit or delete.
Moderators also see a Reports tab. Anyone signed in can report a memory from its page (or the flag on its Wall card); the memory stays up until a moderator hides it or keeps it. The Approved tab can feature a memory in the Wall's Featured row.
/wall shows every approved memory shared with everyone, and
/memories/<id> shows one memory, including those shared by link only.
Both are built on the server from what an anonymous visitor may read, then
cached, so visitors don't each cost a Firestore read:
src/app/api/wall/refresh).usersPrivate/<uid>/reactions plus a count on
the story that only its author is shown. There are no public counters.firestore.rules and storage.rules deny everything by default (Firebase
Storage is not used). Each build
step opens only what its screens need, and adds tests under tests/rules
proving the rest stays closed. Deploy rules with:
npx firebase deploy --only firestore:rules,storage --project dev
src/lib/post-limits.ts). The count lives in postLimits/<uid>, written
in the same batch as each new story and checked by the rules; /api/photos
checks it too before storing a photo.src/components/cookie-choice.tsx). Sign-in storage is essential.@vercel/analytics), cookieless. Turn
it on in the Vercel project's Analytics tab.src/app/sitemap.ts, src/app/robots.ts, canonical
links and link previews use the production address Vercel reports
(VERCEL_PROJECT_PRODUCTION_URL), so a custom domain needs no code change.
Set NEXT_PUBLIC_SITE_URL only to override it. Test links are never listed.next.config.ts.Google blocks its sign-in page inside apps' web views, so the Pick at Store
app signs in with Google itself and hands the page an ID token
(src/lib/google-sign-in.ts). The contract, web view settings and examples
for React Native, Flutter, Android and iOS are in
docs/pick-at-store-app.md. In other apps'
browsers (Instagram, Facebook) the sign-in pages explain how to open the site
in the phone's browser instead.