|
| 1 | +# DevSOL: SEO, Feedback System & Logo |
| 2 | + |
| 3 | +## Context |
| 4 | + |
| 5 | +Three frontend improvements: fix generic page title for SEO, add a public feedback/voting system, and create a brand logo. |
| 6 | + |
| 7 | +## Feature 1: SEO Title & Meta Tags |
| 8 | + |
| 9 | +Update `frontend/index.html`: |
| 10 | +- **Title**: `DevSOL — Buy & Sell Devnet SOL` |
| 11 | +- **Description**: `Marketplace for Solana devnet SOL. Buy devnet SOL with mainnet USDC or sell devnet SOL to receive USDC. Instant, transparent, open-source.` |
| 12 | +- OG tags: `og:title`, `og:description`, `og:type=website`, `og:url` |
| 13 | +- Replace `vite.svg` favicon with DevSOL logo |
| 14 | + |
| 15 | +Single-file change, no alternatives needed. |
| 16 | + |
| 17 | +## Feature 2: Feedback System |
| 18 | + |
| 19 | +### Storage |
| 20 | + |
| 21 | +New `feedback` table in existing SQLite DB (`devsol.db`): |
| 22 | + |
| 23 | +```sql |
| 24 | +CREATE TABLE feedback ( |
| 25 | + id TEXT PRIMARY KEY, |
| 26 | + author TEXT, -- truncated wallet address or null (anonymous) |
| 27 | + content TEXT NOT NULL, |
| 28 | + votes INTEGER DEFAULT 0, |
| 29 | + ip_hash TEXT NOT NULL, -- SHA-256 of IP for vote deduplication |
| 30 | + created_at TEXT DEFAULT (datetime('now')) |
| 31 | +); |
| 32 | + |
| 33 | +CREATE TABLE feedback_votes ( |
| 34 | + feedback_id TEXT NOT NULL, |
| 35 | + ip_hash TEXT NOT NULL, |
| 36 | + PRIMARY KEY (feedback_id, ip_hash) |
| 37 | +); |
| 38 | +``` |
| 39 | + |
| 40 | +### Backend API |
| 41 | + |
| 42 | +| Method | Path | Description | |
| 43 | +|--------|------|-------------| |
| 44 | +| GET | `/feedback` | List all feedback, sorted by votes desc | |
| 45 | +| POST | `/feedback` | Create feedback `{ content, author? }` | |
| 46 | +| POST | `/feedback/:id/vote` | Upvote (one per IP) | |
| 47 | + |
| 48 | +Spam protection: |
| 49 | +- Rate limit: 3 posts/hour per IP, 10 votes/hour per IP |
| 50 | +- Content length: 10-500 chars |
| 51 | +- IP hash for vote deduplication (no double-voting) |
| 52 | + |
| 53 | +### Frontend |
| 54 | + |
| 55 | +New `<FeedbackSection />` component placed between TrustIndicators and Footer in App.tsx: |
| 56 | +- Submit form at top (textarea + optional wallet display if connected) |
| 57 | +- Feedback list sorted by votes (upvote button + count + content + author + timestamp) |
| 58 | +- Anonymous posting; if wallet connected, author shown as truncated address |
| 59 | + |
| 60 | +### Alternatives Considered |
| 61 | + |
| 62 | +- **localStorage voting**: Simpler but easy to game, lost on device switch. Rejected. |
| 63 | +- **Wallet-signed voting**: Prevents Sybil but adds friction for a devnet tool. Rejected. |
| 64 | +- **IP-based dedup (chosen)**: Good enough for devnet marketplace. Low stakes, simple. |
| 65 | + |
| 66 | +## Feature 3: Logo |
| 67 | + |
| 68 | +SVG icon + "DevSOL" text wordmark using brand colors (`#9945FF` purple, `#14F195` lime). |
| 69 | + |
| 70 | +Usage: |
| 71 | +- Favicon (replace `vite.svg`) |
| 72 | +- Header component (replace text-only "DevSOL") |
| 73 | +- OG image reference |
| 74 | + |
| 75 | +## Decisions |
| 76 | + |
| 77 | +- Feedback stored in SQLite (same DB, no new infra) |
| 78 | +- Anonymous posting, optional wallet identity |
| 79 | +- IP-hash vote deduplication (no wallet signature required) |
| 80 | +- Feedback section on main page below stats |
| 81 | +- Simple upvotes only (no downvotes) |
0 commit comments