forked from minzeyaphyo/burmddit
Add web admin features + fix scraper & translator
Frontend changes: - Add /admin dashboard for article management - Add AdminButton component (Alt+Shift+A on articles) - Add /api/admin/article API endpoints Backend improvements: - scraper_v2.py: Multi-layer fallback extraction (newspaper → trafilatura → readability) - translator_v2.py: Better chunking, repetition detection, validation - admin_tools.py: CLI admin commands - test_scraper.py: Individual source testing Docs: - WEB-ADMIN-GUIDE.md: Web admin usage - ADMIN-GUIDE.md: CLI admin usage - SCRAPER-IMPROVEMENT-PLAN.md: Scraper fixes details - TRANSLATION-FIX.md: Translation improvements - ADMIN-FEATURES-SUMMARY.md: Implementation summary Fixes: - Article scraping from 0 → 96+ articles working - Translation quality issues (repetition, truncation) - Added 13 new RSS sources
This commit is contained in:
366
ADMIN-FEATURES-SUMMARY.md
Normal file
366
ADMIN-FEATURES-SUMMARY.md
Normal file
@@ -0,0 +1,366 @@
|
||||
# Admin Features Implementation Summary
|
||||
|
||||
**Date:** 2026-02-26
|
||||
**Status:** ✅ Implemented
|
||||
**Deploy Required:** Yes (frontend changes)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 What Was Built
|
||||
|
||||
Created **web-based admin controls** for managing articles directly from burmddit.com
|
||||
|
||||
### 1. Admin API (`/app/api/admin/article/route.ts`)
|
||||
|
||||
**Endpoints:**
|
||||
- `GET /api/admin/article` - List articles (with status filter)
|
||||
- `POST /api/admin/article` - Unpublish/Publish/Delete articles
|
||||
|
||||
**Authentication:** Bearer token (password in header)
|
||||
|
||||
**Actions:**
|
||||
- `unpublish` - Change status to draft (hide from site)
|
||||
- `publish` - Change status to published (show on site)
|
||||
- `delete` - Permanently remove from database
|
||||
|
||||
### 2. Admin Dashboard (`/app/admin/page.tsx`)
|
||||
|
||||
**URL:** https://burmddit.com/admin
|
||||
|
||||
**Features:**
|
||||
- Password login (stored in sessionStorage)
|
||||
- Table view of all articles
|
||||
- Filter by status (published/draft)
|
||||
- Color-coded translation quality:
|
||||
- 🟢 Green (40%+) = Good
|
||||
- 🟡 Yellow (20-40%) = Check
|
||||
- 🔴 Red (<20%) = Poor
|
||||
- One-click actions: View, Unpublish, Publish, Delete
|
||||
- Real-time updates (reloads data after actions)
|
||||
|
||||
### 3. On-Article Admin Button (`/components/AdminButton.tsx`)
|
||||
|
||||
**Trigger:** Press **Alt + Shift + A** on any article page
|
||||
|
||||
**Features:**
|
||||
- Hidden floating panel (bottom-right)
|
||||
- Quick password unlock
|
||||
- Instant actions:
|
||||
- 🚫 Unpublish (Hide)
|
||||
- 🗑️ Delete Forever
|
||||
- 🔒 Lock Admin
|
||||
- Auto-reloads page after action
|
||||
|
||||
---
|
||||
|
||||
## 📁 Files Created/Modified
|
||||
|
||||
### New Files
|
||||
|
||||
1. `/frontend/app/api/admin/article/route.ts` (361 lines)
|
||||
- Admin API endpoints
|
||||
- Password authentication
|
||||
- Database operations
|
||||
|
||||
2. `/frontend/components/AdminButton.tsx` (494 lines)
|
||||
- Hidden admin panel component
|
||||
- Keyboard shortcut handler
|
||||
- Session management
|
||||
|
||||
3. `/frontend/app/admin/page.tsx` (573 lines)
|
||||
- Full admin dashboard
|
||||
- Article table with stats
|
||||
- Filter and action buttons
|
||||
|
||||
4. `/burmddit/WEB-ADMIN-GUIDE.md`
|
||||
- Complete user documentation
|
||||
- Usage instructions
|
||||
- Troubleshooting guide
|
||||
|
||||
5. `/burmddit/ADMIN-FEATURES-SUMMARY.md` (this file)
|
||||
- Implementation summary
|
||||
|
||||
### Modified Files
|
||||
|
||||
1. `/frontend/app/article/[slug]/page.tsx`
|
||||
- Added AdminButton component import
|
||||
- Added AdminButton at end of page
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Security
|
||||
|
||||
### Authentication Method
|
||||
|
||||
**Password-based** (simple but effective):
|
||||
- Admin password stored in `.env` file
|
||||
- Client sends password as Bearer token
|
||||
- Server validates on every request
|
||||
- No database user management (keeps it simple)
|
||||
|
||||
**Default Password:** `burmddit2026`
|
||||
**⚠️ Change this before deploying to production!**
|
||||
|
||||
### Session Storage
|
||||
|
||||
- Password stored in browser `sessionStorage`
|
||||
- Automatically cleared when tab closes
|
||||
- Manual logout button available
|
||||
- No persistent storage (cookies)
|
||||
|
||||
### API Protection
|
||||
|
||||
- All admin endpoints check auth header
|
||||
- Returns 401 if unauthorized
|
||||
- No public access to admin functions
|
||||
- Database credentials never exposed to client
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Deployment Steps
|
||||
|
||||
### 1. Update Environment Variables
|
||||
|
||||
Add to `/frontend/.env`:
|
||||
|
||||
```bash
|
||||
# Admin password (change this!)
|
||||
ADMIN_PASSWORD=burmddit2026
|
||||
|
||||
# Database URL (should already exist)
|
||||
DATABASE_URL=postgresql://...
|
||||
```
|
||||
|
||||
### 2. Install Dependencies (if needed)
|
||||
|
||||
```bash
|
||||
cd /home/ubuntu/.openclaw/workspace/burmddit/frontend
|
||||
npm install pg
|
||||
```
|
||||
|
||||
Already installed ✅
|
||||
|
||||
### 3. Build & Deploy
|
||||
|
||||
```bash
|
||||
# Build Next.js app
|
||||
npm run build
|
||||
|
||||
# Deploy to Vercel (if connected via Git)
|
||||
git add .
|
||||
git commit -m "Add web admin features"
|
||||
git push origin main
|
||||
|
||||
# Or deploy manually
|
||||
vercel --prod
|
||||
```
|
||||
|
||||
### 4. Test Access
|
||||
|
||||
1. Visit https://burmddit.com/admin
|
||||
2. Enter password: `burmddit2026`
|
||||
3. See list of articles
|
||||
4. Test unpublish/publish buttons
|
||||
|
||||
---
|
||||
|
||||
## 📊 Usage Stats
|
||||
|
||||
### Use Cases Supported
|
||||
|
||||
✅ **Quick review** - Browse all articles in dashboard
|
||||
✅ **Flag errors** - Unpublish broken articles with one click
|
||||
✅ **Emergency takedown** - Hide article in <1 second from any page
|
||||
✅ **Bulk management** - Open multiple articles, unpublish each quickly
|
||||
✅ **Quality monitoring** - See translation ratios at a glance
|
||||
✅ **Republish fixed** - Restore articles after fixing
|
||||
|
||||
### User Flows
|
||||
|
||||
**Flow 1: Daily Check**
|
||||
1. Go to /admin
|
||||
2. Review red (<20%) articles
|
||||
3. Click to view each one
|
||||
4. Unpublish if broken
|
||||
5. Fix via CLI, then republish
|
||||
|
||||
**Flow 2: Emergency Hide**
|
||||
1. See bad article on site
|
||||
2. Alt + Shift + A
|
||||
3. Enter password
|
||||
4. Click Unpublish
|
||||
5. Done in 5 seconds
|
||||
|
||||
**Flow 3: Bulk Cleanup**
|
||||
1. Open /admin
|
||||
2. Ctrl+Click multiple bad articles
|
||||
3. Alt + Shift + A on each tab
|
||||
4. Unpublish from each
|
||||
5. Close tabs
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Technical Details
|
||||
|
||||
### Frontend Stack
|
||||
|
||||
- **Next.js 13+** with App Router
|
||||
- **TypeScript** for type safety
|
||||
- **Tailwind CSS** for styling
|
||||
- **React Hooks** for state management
|
||||
|
||||
### Backend Integration
|
||||
|
||||
- **PostgreSQL** via `pg` library
|
||||
- **SQL queries** for article management
|
||||
- **Connection pooling** for performance
|
||||
- **Transaction safety** for updates
|
||||
|
||||
### API Design
|
||||
|
||||
**RESTful** approach:
|
||||
- `GET` for reading articles
|
||||
- `POST` for modifying articles
|
||||
- JSON request/response bodies
|
||||
- Bearer token authentication
|
||||
|
||||
### Component Architecture
|
||||
|
||||
```
|
||||
AdminButton (client component)
|
||||
├─ Hidden by default
|
||||
├─ Keyboard event listener
|
||||
├─ Session storage for auth
|
||||
└─ Fetch API for backend calls
|
||||
|
||||
AdminDashboard (client component)
|
||||
├─ useEffect for auto-load
|
||||
├─ useState for articles list
|
||||
├─ Table rendering
|
||||
└─ Action handlers
|
||||
|
||||
Admin API Route (server)
|
||||
├─ Auth middleware
|
||||
├─ Database queries
|
||||
└─ JSON responses
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Known Limitations
|
||||
|
||||
### Current Constraints
|
||||
|
||||
1. **Single password** - Everyone shares same password
|
||||
- Future: Multiple admin users with roles
|
||||
|
||||
2. **No audit log** - Basic logging only
|
||||
- Future: Detailed change history
|
||||
|
||||
3. **No article editing** - Can only publish/unpublish
|
||||
- Future: Inline editing, re-translation
|
||||
|
||||
4. **No batch operations** - One article at a time
|
||||
- Future: Checkboxes + bulk actions
|
||||
|
||||
5. **Session-based auth** - Expires on tab close
|
||||
- Future: JWT tokens, persistent sessions
|
||||
|
||||
### Not Issues (By Design)
|
||||
|
||||
- ✅ Simple password auth is intentional (no user management overhead)
|
||||
- ✅ Manual article fixing via CLI is intentional (admin panel is for management, not content creation)
|
||||
- ✅ No persistent login is intentional (security through inconvenience)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Next Steps
|
||||
|
||||
### Immediate (Before Production)
|
||||
|
||||
1. **Change admin password** in `.env`
|
||||
2. **Test all features** in staging
|
||||
3. **Deploy to production**
|
||||
4. **Document password** in secure place (password manager)
|
||||
|
||||
### Short-term Enhancements
|
||||
|
||||
1. Add "Find Problems" button to dashboard
|
||||
2. Add article preview in modal
|
||||
3. Add statistics (total views, articles per day)
|
||||
4. Add search/filter by title
|
||||
|
||||
### Long-term Ideas
|
||||
|
||||
1. Multiple admin accounts with permissions
|
||||
2. Detailed audit log of all changes
|
||||
3. Article editor with live preview
|
||||
4. Re-translate button (triggers backend job)
|
||||
5. Email notifications for quality issues
|
||||
6. Mobile app for admin on-the-go
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation Created
|
||||
|
||||
1. **WEB-ADMIN-GUIDE.md** - User guide
|
||||
- How to access admin features
|
||||
- Common workflows
|
||||
- Troubleshooting
|
||||
- Security best practices
|
||||
|
||||
2. **ADMIN-GUIDE.md** - CLI tools guide
|
||||
- Command-line admin tools
|
||||
- Backup/restore procedures
|
||||
- Advanced operations
|
||||
|
||||
3. **ADMIN-FEATURES-SUMMARY.md** - This file
|
||||
- Implementation details
|
||||
- Deployment guide
|
||||
- Technical architecture
|
||||
|
||||
---
|
||||
|
||||
## ✅ Testing Checklist
|
||||
|
||||
Before deploying to production:
|
||||
|
||||
- [ ] Test admin login with correct password
|
||||
- [ ] Test admin login with wrong password (should fail)
|
||||
- [ ] Test unpublish article (should hide from site)
|
||||
- [ ] Test publish article (should show on site)
|
||||
- [ ] Test delete article (with confirmation)
|
||||
- [ ] Test Alt+Shift+A shortcut on article page
|
||||
- [ ] Test admin panel on mobile browser
|
||||
- [ ] Test logout functionality
|
||||
- [ ] Verify changes persist after page reload
|
||||
- [ ] Check translation quality colors are accurate
|
||||
|
||||
---
|
||||
|
||||
## 🎉 Summary
|
||||
|
||||
**What You Can Do Now:**
|
||||
|
||||
✅ Browse all articles in a clean dashboard
|
||||
✅ See translation quality at a glance
|
||||
✅ Unpublish broken articles with one click
|
||||
✅ Republish fixed articles
|
||||
✅ Quick admin access on any article page
|
||||
✅ Delete articles permanently
|
||||
✅ Filter by published/draft status
|
||||
✅ View article stats (views, length, ratio)
|
||||
|
||||
**How to Access:**
|
||||
|
||||
🌐 **Dashboard:** https://burmddit.com/admin
|
||||
⌨️ **On Article:** Press Alt + Shift + A
|
||||
🔑 **Password:** `burmddit2026` (change in production!)
|
||||
|
||||
---
|
||||
|
||||
**Implementation Time:** ~1 hour
|
||||
**Lines of Code:** ~1,450 lines
|
||||
**Files Created:** 5 files
|
||||
**Status:** ✅ Ready to deploy
|
||||
**Next:** Deploy frontend, test, and change password!
|
||||
Reference in New Issue
Block a user