mirror of
https://github.com/pezkuwichain/pezkuwi-telegram-miniapp.git
synced 2026-08-06 01:05:41 +00:00
b2b4751f7adafaf283c23d91bcc41be486d83715
Two pieces of infrastructure existed only on servers, as single copies with no history and no review: /usr/local/bin/supabase-deploy-functions the gate both projects deploy through /opt/supabase-self-hosted/functions-registry.json who owns which function name The gate exists to stop silent drift between what a repo declares and what a server actually runs. Leaving it unversioned meant the mechanism was drifting the same way it was built to prevent — and losing that host would have lost it entirely, along with any record of why it works the way it does. Both are now in ops/ and synced to the host by CI on every deploy, installed before the functions they validate so a change to the gate ships together with them. Verified identical to the server copies by checksum before committing, so this captures the running state rather than replacing it. Branch protection gets the same treatment: apply-repo-settings.sh is idempotent and has a --check mode that reports drift without changing anything. It was applied by hand through the API today, so nothing here reflected it. Documented alongside: why the registry lives in this repo even though pwap-web depends on it (a pwap-web change needs a PR here — deliberate friction, since the registry is the record of who owns what and should not be edited on a server where nobody sees the change), and why listing each CI job individually in the protection rules is a weakness here that pwap-web avoids with an aggregate job.
Pezkuwi Telegram Mini App
Telegram Mini App for Pezkuwichain - Forum, Announcements, Rewards, and Wallet integration.
Tech Stack
- Frontend: React 18 + TypeScript + Vite
- Styling: Tailwind CSS + shadcn/ui patterns
- State: TanStack Query (React Query)
- Backend: Supabase (PostgreSQL + Auth + Edge Functions)
- Testing: Vitest + Testing Library
- CI/CD: GitHub Actions
Getting Started
Prerequisites
- Node.js >= 18
- npm >= 9
- Supabase account
Installation
# Clone the repo
git clone https://github.com/pezkuwichain/pezkuwi-telegram-miniapp.git
cd pezkuwi-telegram-miniapp
# Install dependencies
npm install
# Copy environment template
cp .env.example .env
# Add your Supabase credentials to .env
Development
# Start dev server
npm run dev
# Run tests
npm run test
# Type check
npm run typecheck
# Lint
npm run lint
# Format code
npm run format
# Full validation (typecheck + lint + test + build)
npm run validate
Build
npm run build
Output will be in dist/ directory.
Project Structure
src/
├── contexts/ # React contexts (Auth)
├── hooks/ # Custom hooks (Supabase, Telegram)
├── lib/ # Utilities (env, supabase client)
├── sections/ # Main app sections
│ ├── Announcements.tsx
│ ├── Forum.tsx
│ ├── Rewards.tsx
│ └── Wallet.tsx
├── test/ # Test setup
├── types/ # TypeScript types
├── App.tsx # Main app component
└── main.tsx # Entry point
Database Schema
Tables (prefixed with tg_ to avoid conflicts):
tg_users- Telegram userstg_announcements- Admin announcementstg_announcement_reactions- Like/dislike reactionstg_threads- Forum threadstg_thread_likes- Thread likestg_replies- Thread repliestg_reply_likes- Reply likes
Environment Variables
| Variable | Description |
|---|---|
VITE_SUPABASE_URL |
Supabase project URL |
VITE_SUPABASE_ANON_KEY |
Supabase anon/public key |
Telegram Setup
- Create bot via @BotFather
- Enable Mini App in bot settings
- Set Mini App URL to deployment URL
- Deploy
telegram-authEdge Function to Supabase
License
MIT
Languages
TypeScript
91.4%
Python
3.1%
PLpgSQL
2.4%
JavaScript
2.2%
Shell
0.4%
Other
0.4%