mirror of
https://github.com/pezkuwichain/pezkuwi-telegram-miniapp.git
synced 2026-07-31 18:05:52 +00:00
54f565621c61da88d02d2efaecd6ebcd6ea62727
The Supabase edge-function volume on the host is shared with pwap-web, which deploys into it by rsyncing its whole tree. Both projects defined a function called telegram-auth, so on 2026-06-28 pwap-web's login-widget handler replaced this project's initData handler. Sign-in and every wallet screen behind it have returned 401 ever since; nothing failed loudly because the name still resolved. Rename this project's two colliding functions to a tgm- namespace so the two deploys can no longer reach the same directory, and point the client at the new name. process-withdraw is renamed too: it is currently unreferenced here, but it moves platform funds, so leaving it shadowed by another project's version is not something to keep. Also deploy functions from CI. They were last pushed by hand in April, so seven of them had drifted behind the repo and one had never shipped at all. The new step writes through the host's ownership gate, which refuses any name this project does not own — the drift and the collision both stop here. Ownership is recorded in /opt/supabase-self-hosted/functions-registry.json.
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.7%
Python
2.7%
PLpgSQL
2.5%
JavaScript
2.2%
Shell
0.4%
Other
0.4%