Catalog
Guest
Folder Actions
Admin
Account
Please sign in to continue
Firebase Rules Must Be Updated First
Open Firestore Rules and copy these rules then click Publish:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// ⚠️ Replace with YOUR real admin email(s) — must match ADMIN_EMAILS in the app
function isSuperAdmin() {
return request.auth != null &&
request.auth.token.email in ["barwaryayan@gmail.com"];
}
function myManagedUser() {
return get(/databases/$(database)/documents/managed_users/$(request.auth.uid));
}
function isCoAdmin() {
return request.auth != null &&
myManagedUser().data.role == "co_admin" &&
myManagedUser().data.disabled != true;
}
function isActiveManagedUser() {
return request.auth != null &&
exists(/databases/$(database)/documents/managed_users/$(request.auth.uid)) &&
myManagedUser().data.disabled != true;
}
// Admin + co_admin can create/edit; ONLY Admin can delete (incl. move-to-trash).
match /models/{document=**} {
allow read: if isActiveManagedUser() || isSuperAdmin();
allow create, update: if isSuperAdmin() || isCoAdmin();
allow delete: if isSuperAdmin();
}
match /folders/{document=**} {
allow read: if isActiveManagedUser() || isSuperAdmin();
allow create: if isSuperAdmin() || isCoAdmin();
// co_admin may edit folder content, but cannot move it to (or out of) Trash —
// that requires the "deleted" field to change, which is Admin-only.
allow update: if isSuperAdmin() ||
(isCoAdmin() && request.resource.data.deleted == resource.data.deleted);
allow delete: if isSuperAdmin();
}
// Only the Admin manages accounts (create / role / disable / delete).
// Every signed-in account may read this collection (needed for the app's
// own role lookup), but only the Admin can write to it.
match /managed_users/{uid} {
allow read: if request.auth != null;
allow write: if isSuperAdmin();
}
match /login_logs/{document=**} {
allow read, write: if request.auth != null;
}
match /app_settings/{document=**} {
allow read: if true;
allow write: if isSuperAdmin() || isCoAdmin();
}
}
}
⚠️ Replace barwaryayan@gmail.com above with your real admin email(s) — it must exactly match ADMIN_EMAILS in the app code.
After publishing click
No Folders Yet
Create your first folder to organize your models
Folders in trash can be restored or permanently deleted
Trash is Empty
Deleted folders will appear here
Folder is Empty
Add models to this folder to get started
Choose download method
Downloading to Gallery
Preparing...
✓ All images downloaded!
Drag image here or click to select
JPG, PNG, WEBP — up to 10MB
Image is fit fully inside this size with white padding added if needed — nothing gets cropped.
Example: 2y _ 3y or 6m _ 12m — Press + to add range
Exclude from discount
No discount applies to this (folder-wide or global)
Are you sure? The model will be marked "Sold Out" and moved to the end of the folder.
The model has been marked "Sold Out" and moved to the end of the folder automatically.
This folder will be moved to trash. Models inside will NOT be deleted — you can restore this folder anytime.
No folders available. Create a folder first.
Applies to all models in this folder. Models with custom settings keep their own.
📦 Badge Style (Price / Age / Discount)
Applies to all folders
🌍 These settings apply to all folders. Folders with custom settings are controlled by those instead.
Applies to all folders
File type
JPG
Best for sharing
Image style
Sort order
Select models
Admin only
General access
Anyone with the link
Anyone on the internet can view
The link opens the sign-in window directly for editing
Folders
—
Models
—
With Image
—
In Trash
—
Quick Actions
Top Folders by Models
Create New User
Managed Users
Loading users...
Login Sessions (last 200)
Filter by Role
Loading sessions...
App Branding
App Name
Appearance
Page Background Color
Applies everywhere — the Home/folders view and everything else.
Folder Interior Background Color
Just the area shown while you're inside a folder (breadcrumb + models grid).
Catalog Fields
One option per line. These lists control what's selectable in the Type / Season / Gender fields on every model, and in the advanced search filters.
Type options
Season options
Gender options
Domain Renewal
Tracks when your domain (e.g. catalog.sonbola.shop) needs renewing. Set the expiry date here after each renewal — a full-screen reminder shows on every app open once it's within 30 days, until you turn it off below.
Domain active — — days remaining
Domain Name
Expiry Date
Your domain expires soon. Please renew it to avoid losing access.
Turn this off in Admin Panel → App Settings → Domain Renewal.
🔑 Features & Permissions
Loading...
📂 Folder Access
Control which folders this user can see.
Loading folders...
This user will be disabled and cannot sign in anymore.
⚠ This action cannot be undone