Kaito Query Service
AI query service with USDC payments on Base. Gemini, MiniMax, Replicate, OpenRouter.
Ask AI about Kaito Query Service
Powered by Claude Β· Grounded in docs
I know everything about Kaito Query Service. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Sand Gallery
A premium portfolio website for Kyle Touchet (@Sandemon) - developer, creative technologist, and AI enthusiast.
Tech Stack
| Category | Technology |
|---|---|
| Frontend | React 19 + Vite 7 |
| Styling | Tailwind CSS 3.4 |
| Animation | Framer Motion 12 |
| Routing | React Router DOM 7 |
| Backend | Firebase (Firestore, Auth, Storage, Functions) |
| Web3 | OnchainKit, Wagmi, viem |
| Payments | Stripe |
Features
Pages
- Home (
/) - Landing page with Kyle's bio and title - Gallery (
/gallery) - 8-category portfolio showcase - About (
/about) - About page - Contact (
/contact) - Contact information - Pricing (
/pricing) - Credit purchase (accessible via user dropdown) - Profile (
/profile) - User profile and credits balance - Admin Dashboard (
/admin) - Site management (owner only) - Admin Media (
/admin/media) - Media upload and category management (owner only)
Gallery Categories
- GAMES - Interactive experiences
- APPS - Applications
- TOOLS - Utilities and software
- VIDEOS - Visual media
- 3D - 3D models and VR
- IMAGES - Art and photography
- AUDIO - Music and sound
- OTHER - Miscellaneous
Admin Features
- Media upload (images, videos, audio, embeds)
- Media library management
- Category assignment (assign media to gallery categories)
Getting Started
Prerequisites
- Node.js 18+
- npm or yarn
- Firebase project (for Auth, Firestore, Storage)
Installation
# Clone the repository
git clone https://github.com/TheSandemon/sand-gallery.git
cd sand-gallery
# Install dependencies
npm install
# Create .env file with your Firebase config
# See .env.example or Firebase console
Environment Variables
Create a .env file with:
VITE_FIREBASE_API_KEY=your_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_id
VITE_FIREBASE_VAPID_KEY=your_vapid_key
VITE_STRIPE_PUBLIC_KEY=your_stripe_key
VITE_WALLET_CONNECT_PROJECT_ID=your_wallet_connect_id
Development
# Start development server
npm run dev
# Build for production
npm run build
Project Structure
sand-gallery/
βββ src/
β βββ components/
β β βββ admin/ # MediaUploader, CategoryManager
β β βββ cms/ # DynamicRenderer, PricingGrid, GalleryGrid
β β βββ gallery/ # MasonryGrid, MediaCard, GalleryExplorer
β β βββ tools/ # AudioGenerator
β β βββ Navbar.jsx # Navigation (hardcoded whitelist)
β β βββ Footer.jsx # Dynamic versioning
β β βββ UserButton.jsx # Avatar + dropdown
β β βββ ...
β βββ pages/
β β βββ Home.jsx # Landing page
β β βββ Gallery.jsx # 8-category gallery
β β βββ AdminMedia.jsx # Media management
β β βββ ...
β βββ hooks/
β β βββ useSiteSettings.js
β β βββ ...
β βββ context/
β β βββ AuthContext.jsx
β β βββ Web3Provider.jsx
β βββ ...
βββ .env # Environment variables
βββ firebase.json # Firebase config
βββ firestore.rules # Database rules
βββ package.json
Important Notes
Navigation
The navigation bar uses a hardcoded whitelist in Navbar.jsx to prevent flickering issues that occurred when loading from Firestore. The current navigation is:
- SAND β
/(landing page) - GALLERY β
/gallery - ABOUT β
/about - CONTACT β
/contact - ADMIN β
/admin(owner only)
PRICING is NOT in the main nav - it can only be accessed via the credits button in the user dropdown menu.
Footer Version
The footer displays a dynamic unique version timestamp (vYYYYMMDD-HHMMSS) that changes on every page load. This ensures complete uniqueness for debugging purposes.
Gallery Data
Gallery categories are hardcoded (8 categories), but the items within each category are fetched from Firestore at runtime. Use the Admin Media page to upload and assign content to categories.
Firestore Collections
| Collection | Purpose |
|---|---|
users/{uid} | User profiles, credits, roles |
gallery_categories/{id} | Category items (games, apps, etc.) |
media/{id} | Uploaded media files |
config/site_settings | Site configuration |
Known Issues / Limitations
-
Firestore Nav Flicker: Historically, nav links loaded from Firestore caused visual flicker. This was resolved by hardcoding the navigation in
Navbar.jsx. -
Legacy Features: The
/studioand/crmroutes exist but are legacy AI generation features not currently in active use. -
Admin Access: Only users with
role === 'owner'can access admin features. Role is set in Firestore underusers/{uid}/role.
Deployment
Firebase Hosting
# Deploy to production
firebase deploy
# Deploy to preview channel
firebase hosting:channel:deploy
GitHub Actions
The repository includes GitHub Actions workflows that:
- Build the project on push
- Deploy to Firebase Hosting preview on PR creation
- Deploy to production on merge to main
License
Private - All rights reserved.
Author
Kyle Touchet (@Sandemon)
- Developer, Creative Technologist, AI Enthusiast
- Based in Louisiana, USA
Documentation for Developers
See also:
