{"id":46901193,"url":"https://github.com/marcelo-m7/monynha.fun","last_synced_at":"2026-03-11T00:05:04.316Z","repository":{"id":333159350,"uuid":"1128963663","full_name":"marcelo-m7/monynha.fun","owner":"marcelo-m7","description":"Monynha Fun - Um acervo de conteúdos babadeiros do youtube","archived":false,"fork":false,"pushed_at":"2026-03-08T16:19:51.000Z","size":6961,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-08T16:22:57.166Z","etag":null,"topics":["bun","docker","monynha","monynha-fun","online","postgresql","project","shadcn-ui","supabase","typescript","website"],"latest_commit_sha":null,"homepage":"https://monynha.fun","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcelo-m7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-06T12:06:14.000Z","updated_at":"2026-03-08T12:33:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/marcelo-m7/monynha.fun","commit_stats":null,"previous_names":["monynha-softwares/video-vault","marcelo-m7/monynha.fun"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/marcelo-m7/monynha.fun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-m7%2Fmonynha.fun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-m7%2Fmonynha.fun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-m7%2Fmonynha.fun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-m7%2Fmonynha.fun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcelo-m7","download_url":"https://codeload.github.com/marcelo-m7/monynha.fun/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcelo-m7%2Fmonynha.fun/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30362762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"ssl_error","status_checked_at":"2026-03-10T21:40:59.357Z","response_time":106,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","docker","monynha","monynha-fun","online","postgresql","project","shadcn-ui","supabase","typescript","website"],"created_at":"2026-03-11T00:05:04.146Z","updated_at":"2026-03-11T00:05:04.294Z","avatar_url":"https://github.com/marcelo-m7.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Monynha Fun – Cultural Video Curation Platform 🎬\n\n![Monynha Fun Hero](./docs/placeholder.png)\n\n\u003e *A passion project by **Marcelo Santos**, crafted with care to bring together the best of cultural video content that gets lost in the algorithmic noise. Now with mention autocomplete because Marcelo got tired of copying usernames like it's 2005.*\n\n**🌐 Live Platform**: https://monynha.fun\n\n---\n\n## 💭 What's This All About?\n\nLook, I built Monynha Fun because I was fed up, sabe? Scrolling through YouTube, seeing the same algorithm-driven trash, while *amazing* cultural content just... disappears. So here's the deal:\n\nWe're creating a space where **human taste matters**. A place where curators (like you, like me) can say \"ey, this video is worth your time\" – and mean it. AI helps us out, sure, but **humans are in charge**. No predatory engagement metrics. No dark patterns. Just good content, properly organized.\n\n### The Vision\n- 🤝 **People \u003e Algorithms**: Real human expertise, enhanced by AI (not replaced by it)\n- 🌍 **Cultural Preservation**: Keeping the gems that YouTube's algorithm would bury\n- 📚 **Community-Driven**: Every curator brings their taste, their knowledge, their soul\n- 🎓 **Learning Through Playlists**: Organize videos into beautiful learning paths\n- 🔓 **Open \u0026 Accessible**: Quality content for everyone, no gatekeeping\n\n---\n\n## 📸 See It In Action\n\n### Homepage – Where Magic Happens ✨\n![Homepage Screenshot](./docs/homepage.png)\n\nYour first impression matters, né? Clean hero section, easy access to what's hot right now, and categories that actually make sense. No fluff.\n\n### Discover Videos 🔍\n![Video Discovery](./docs/videos.png)\n\nBrowse through categories that real people organized. Search, filter, read about *why* someone added a video. Simple as that.\n\n### Create Playlists Like You Own The Place 📋\n![Playlists](./docs/placeholder.png)\n\nBuild learning paths. Curate collections. Share with friends or the whole community. Your taste, your rules. You can even invite collaborators to help build something together.\n\n### Comments \u0026 Community Interaction 💬\n![Comments Preview](./docs/preview.png)\n\nEvery video deserves thoughtful discussion. Leave comments, reply to curators, share why a video matters to you. Build real conversations around content that resonates.\n\n**✨ NEW**: Type `@` and watch the magic happen – autocomplete dropdown with user avatars, keyboard navigation (↑↓ to browse, Enter to select), and 300ms debouncing because we're not savages who spam the database. Works on mobile too. 📱\n\n**🌍 Public Comments**: Everyone can read comments now – even anonymous lurkers. Good discussions deserve an audience. (Don't worry, only logged-in folks can post. We're not *that* crazy.)\n\nNo algorithms deciding what's visible – comments stay honest and community-driven. Tag people with `@username` and actually see their face pop up. Because UX matters, viu?\n\n### Your Profile 👤\n![User Profile](./docs/placeholder.png)\n\nShow the world what you're passionate about. Add a bio, customize your presence. People will see the videos *you* curated. Be proud of that.\n\n---\n\n## 🛠 The Tech Behind It All\n\nI chose a stack that's modern, scalable, and – honestly – a joy to work with. No bloat, no unnecessary complexity.\n\n### Frontend Magic ✨\n- **React.js** + **TypeScript** – Because bugs are embarrassing\n- **Vite** – Lightning-fast builds and dev server. Makes coding pleasant\n- **Tailwind CSS** – Utility-first styling without CSS headaches\n- **shadcn/ui** – Beautiful components that just work\n- **React Router DOM** – Smooth navigation experience\n\n### State \u0026 Data Management 🧠\n- **TanStack Query** – Smart caching and server state (no data soup)\n- **React Hook Form** – Forms that don't suck\n- **Zod** – Type-safe validation from day one\n\n### Backend Backbone 🔧\n- **Supabase** – PostgreSQL, Auth, and Edge Functions in one place\n- **Supabase RLS** – Row-level security, properly implemented\n- **Edge Functions** – AI enrichment and smart automations\n\n### UX Polish 🎨\n- **Lucide React** – Clean icons\n- **Sonner** – Toast notifications that don't annoy\n- **date-fns** – Dates done right\n- **i18next** – Portuguese, English, and more\n\n### Code Quality \u0026 CI/CD 🔧\n- **ESLint** + **TypeScript** – Catch errors before they happen\n- **Vitest** – Fast, modern testing framework\n- **GitHub Actions** – Automated CI with intelligent caching\n- **Feature-Sliced Design** – Organized by domain (entities, features, shared)\n\n---\n\n## 🎯 What Can You Do Here?\n\n### 🔍 Discover Videos\nBrowse intelligently organized content. Search, filter by category, see what real curators think about each video. No dark patterns, just honest recommendations.\n\n### 📋 Build Playlists\nCreate learning paths, collections, whatever makes sense to you. Share with the community or keep it personal. Invite friends to collaborate – yeah, we support that.\n\n### 👥 User System\nSign up securely. Create a profile that represents *you*. Show everyone your curated taste. Your contribution matters here.\n\n### ⭐ Save Favorites\nKeep track of videos that hit different. Your personal collection grows with you.\n\n### 🌍 Community\nSee who else is curating. Check out their playlists. Learn from other people's taste. Share knowledge.\n\n### 📹 Submit Content\nFound an amazing video the world should see? Add it to Monynha Fun. Our AI will help enrich it with metadata.\n\n### 🌐 Multi-Language\nPortuguese, English, Spanish, French – we're building for everyone. More languages coming.\n\n### 💬 Smart Mentions\nTag users in comments with autocomplete that actually works. Type `@` and boom – dropdown with avatars, display names, and keyboard navigation. No more copying usernames like a caveman. Fully internationalized in 4 languages because we're fancy like that. ✨\n\n---\n\n## 🚀 Getting Started (It's Easy, I Promise)\n\n### Set It Up Locally\n\n```bash\n# Clone the repo\ngit clone https://github.com/marcelo-m7/monynha.fun\n\n# Go into the folder\ncd monynha.fun\n\n# Install dependencies\npnpm install\n# or if you prefer npm:\nnpm install\n\n# Fire it up!\npnpm dev\n```\n\nOpen **http://localhost:8080** and boom – you're in.\n\n### Environment Setup\n\nCreate a `.env.local` file (ask Marcelo for the keys, or set up your own Supabase project):\n\n```env\nVITE_SUPABASE_URL=your_supabase_url_here\nVITE_SUPABASE_PUBLISHABLE_KEY=your_publishable_key_here\n```\n\n---\n\n## 📁 How The Code Is Organized\n\nThe structure is clean and logical – I hate messy codebases:\n\n```\nsrc/\n├── components/              # Reusable UI pieces\n│   ├── ui/                 # shadcn/ui components (don't touch upstream)\n│   ├── playlist/           # Playlist-specific components\n│   ├── Header.tsx\n│   ├── Footer.tsx\n│   └── ...\n├── pages/                   # Page-level components (one per route)\n│   ├── Index.tsx           # Homepage\n│   ├── Auth.tsx            # Login/Signup\n│   ├── Videos.tsx          # Video browse\n│   ├── VideoDetails.tsx    # Single video view\n│   ├── Playlists.tsx       # Playlist manager\n│   ├── PlaylistDetails.tsx\n│   ├── Profile.tsx         # User profiles\n│   ├── EditProfile.tsx\n│   ├── Favorites.tsx\n│   ├── Community.tsx\n│   ├── Submit.tsx          # Add videos\n│   └── ...more pages\n├── features/                # Feature modules (organized by domain)\n│   ├── auth/               # Authentication\n│   ├── videos/             # Video management\n│   ├── playlists/          # Playlist management\n│   └── ...\n├── entities/                # Domain entities\n│   ├── video/              # Video entity \u0026 API\n│   ├── playlist/           # Playlist entity \u0026 API\n│   └── ...\n├── shared/                  # Shared utilities and hooks\n│   ├── hooks/              # Reusable React hooks\n│   │   ├── use-mobile.tsx        # Mobile detection\n│   │   ├── useVideoViewIncrement.tsx  # Video view tracking\n│   │   └── useRequireAuth.tsx    # Authentication guard\n│   ├── lib/                # Helper functions\n│   │   ├── format.ts       # Data formatting utilities\n│   │   └── youtube.ts      # YouTube URL parsing\n│   └── test/               # Testing utilities\n├── integrations/            # External services\n│   └── supabase/           # Supabase client setup\n├── lib/                     # Utilities\n│   ├── utils.ts            # Helpers (cn, etc)\n│   └── youtube.ts          # YouTube URL parsing, oEmbed\n├── i18n/                    # Translations\n│   ├── config.ts           # i18next setup\n│   └── locales/            # PT, EN, etc\n├── App.tsx                  # Main app \u0026 routes\n└── main.tsx                 # Entry point\n```\n\n### Custom Hooks\n\nThe codebase includes several custom hooks to promote code reuse and maintainability:\n\n#### `useVideoViewIncrement`\nManages video view count increments with optimistic UI updates:\n```typescript\nconst { viewCount, showPlus, handleViewIncrement } = useVideoViewIncrement(initialCount, animationDuration);\n```\n\n#### `useRequireAuth`\nAuthentication guard for protected routes:\n```typescript\nconst { user, loading } = useRequireAuth('/auth');\n```\n\n#### `use-mobile`\nDetects if the user is on a mobile device:\n```typescript\nconst isMobile = useMobile();\n```\n\nEvery folder has a purpose. No random files lying around.\n\n---\n\n## 📜 Available Commands\n\n```bash\n# Development server with hot reload (what you'll use most)\npnpm dev\n\n# Build for production (minified, optimized)\npnpm build\n\n# Build with dev settings (if debugging production)\npnpm build:dev\n\n# Preview the production build locally\npnpm preview\n\n# Run the linter (keep code clean)\npnpm lint\n\n# Type-check the project\npnpm typecheck\n\n# Run tests (one-off)\npnpm test\n\n# Run tests in watch mode\npnpm test:watch\n\n# Run tests with coverage\npnpm test:coverage\n\n# Generate bundle analysis report\npnpm build:analyze\n```\n\n---\n\n## 🐳 Deploying This Thing\n\nWe use Docker to keep everything consistent. Nginx serves the static build.\n\n```bash\n# Build the image\ndocker build -t monynha-fun .\n\n# Run it locally\ndocker run -p 80:80 monynha-fun\n```\n\nThen hit `http://localhost` and you're golden.\n\n### Platforms That Work\n- **Coolify** (recommended – simple, clean)\n- Any Docker-compatible host (AWS, DigitalOcean, Heroku, whatever)\n- Vercel/Netlify (if you prefer that workflow)\n\nJust make sure your Supabase env vars are set. That's it.\n\n---\n\n## 🔐 Making It Work – Environment Variables\n\nYou need two things from Supabase:\n\n```env\nVITE_SUPABASE_URL=https://your-project.supabase.co\nVITE_SUPABASE_PUBLISHABLE_KEY=your_publishable_key_here\n```\n\nThese are public (it's fine, Supabase uses RLS to protect data). Create a `.env.local` file in the root and paste them in.\n\n---\n\n## 🗄️ The Database (Where The Magic Happens)\n\nI designed the database with security and simplicity in mind:\n\n### Core Tables\n- **profiles** – User info (name, bio, avatar)\n- **videos** – The actual content (title, description, YouTube ID)\n- **categories** – Organized tags (Tech, Arts, Education, etc)\n- **favorites** – Videos you bookmarked\n- **playlists** – Your collections\n- **playlist_videos** – Links videos to playlists (with ordering!)\n- **ai_enrichments** – AI-generated metadata for each video\n- **playlist_collaborators** – Share playlists with friends\n- **playlist_progress** – Track watched videos in learning playlists\n\n### Security First 🔒\nEvery table has Row-Level Security (RLS) enabled. Users can only see/edit their own data. Period.\n\nNo data leaks. No shortcuts. We take that seriously.\n\n---\n\n## 🎨 The Design System\n\n### Tailwind CSS\nNo CSS files. No modules. Just clean utility classes. Responsive by default.\n\n### shadcn/ui Components\nHigh-quality, accessible components. We extend them when needed but don't modify the source (keeps upgrades smooth).\n\n### Icons from Lucide React\nSimple, beautiful, consistent. Covers almost everything.\n\n---\n\n## 🌍 Languages \u0026 Internationalization\n\nBuilt with i18next so we can add languages super easily. Right now:\n- 🇧🇷 **Portuguese (PT-BR)**\n- 🇺🇸 **English (EN-US)**\n\nMore languages? Easy. Just ask or add translations to `src/i18n/locales/`.\n\n---\n\n## 🤝 Want to Contribute?\n\nGreat! You can work locally or directly on GitHub. Here's how:\n\n### Option 1: Local Development (The Pro Way)\n```bash\ngit clone https://github.com/marcelo-m7/monynha.fun\ncd monynha.fun\npnpm install\npnpm dev\n```\nMake changes, test locally, push to your branch.\n\n### Option 2: GitHub Web Editor (Quick Fixes)\n1. Go to a file\n2. Click the pencil icon\n3. Edit and commit\n\n### Option 3: GitHub Codespaces (If You're Feeling Fancy)\n1. Click \"Code\" → \"Codespaces\" → \"New codespace\"\n2. Edit directly in the browser\n3. Commit and push\n\n---\n\n## 🔗 Custom Domain\n\nWant your own domain? Your deployment platform probably has docs for that. Set DNS records, done.\n\n---\n\n## 📞 More Resources\n\n- **About Page** – Learn what we're really doing here\n- **FAQ Page** – Answers to stuff people ask\n- **Rules Page** – How to behave (spoiler: just be cool)\n- **Contact Page** – Hit me up if you have questions\n\n---\n\n## 📊 What Gets Tracked\n\n- How many videos are curated\n- Who's contributing\n- View counts (so we can feature the good stuff)\n- Category popularity\n\nNothing creepy. No ads. No surveillance.\n\n---\n\n## 🆘 Running Into Problems?\n\n### Port Already In Use?\n```bash\npnpm dev -- --port 3000\n```\n\n### Dependencies Missing?\n```bash\n# Clear and reinstall\nrm pnpm-lock.yaml\npnpm install\n```\n\n### Build Failing?\n```bash\n# Clear the cache\nrm -rf dist\npnpm build\n```\n\n### Something Else?\nCheck the [Supabase docs](https://supabase.com/docs) or [Vite docs](https://vitejs.dev). Or just message me (@marcellosantos).\n\n---\n\n## 📝 About This Project\n\n**Built by**: Marcelo Santos  \n**Organization**: Monynha Softwares  \n**License**: Check the LICENSE file  \n**Version**: 0.1.5 (and growing!)\n\n---\n\n## 🌟 What's Next?\n\nWe're constantly improving. On the roadmap:\n- Batch AI enrichment for existing videos\n- Video search with full-text indexing\n- Smart recommendations\n- Community comments \u0026 ratings\n- Better mobile experience\n- Maybe a mobile app someday\n\n---\n\n## 🎉 Get Involved\n\n- 📹 **Submit videos** – Share the good stuff\n- 📋 **Create playlists** – Build learning paths\n- 🐛 **Report bugs** – Help us improve\n- 💡 **Suggest features** – What's missing?\n- 🤝 **Spread the word** – Tell your friends\n\n---\n\n**Visit us at**: https://monynha.com  \n**Made with** ☕ **and** 💡 **by Marcelo Santos**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcelo-m7%2Fmonynha.fun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcelo-m7%2Fmonynha.fun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcelo-m7%2Fmonynha.fun/lists"}