ersaayan f8fffdce83 perf: Optimize recommendation system and improve error handling
- Fix N+1 query problem in preset package fetching
  * Search with limit 5 to find best matches
  * Case-insensitive package name matching
  * Fallback to most popular when no exact match

- Improve category filtering accuracy
  * Update category mapping to match database schema
  * Remove duplicate packages in category fetching
  * Better distribution across categories

- Add version control for localStorage profile
  * Support future schema migrations
  * Auto-migrate old profiles to new version
  * Persist version in localStorage

- Enhance error handling
  * Specific error messages for 400/500/404 responses
  * Network error detection
  * User-friendly error messages in UI

- Fix OS detection fallback
  * Default to ubuntu when detection returns unknown
  * Prevent empty OS selection in onboarding

- Add better API validation
  * Explicit limit range validation (1-50)
  * Clear error messages for invalid inputs
2025-11-22 17:47:52 +03:00

RepoHub - Cross-Platform Package Manager

Simplify software installation across Linux, Windows, and macOS with official repositories.

RepoHub provides a unified interface for package discovery and installation across different operating systems.

🚀 Features

  • Cross-Platform Support: Works on Linux (Debian, Ubuntu, Arch, Fedora), Windows, and macOS.
  • Official Repositories: Access software strictly from trusted, official sources.
  • Script Generation: Generate idempotent installation scripts for your selected platform.
  • Smart Filtering: efficiently browse and filter packages.

🛠️ Technology Stack

Frontend

  • Framework: Next.js 14+ (React)
  • Styling: Tailwind CSS
  • Icons: Lucide React
  • State Management: React Query + Zustand

Backend

  • Runtime: Node.js (TypeScript)
  • Database: PostgreSQL
  • Infrastructure: Docker

🏁 Getting Started

Prerequisites

  • Node.js 18+
  • npm / pnpm / yarn
  • Docker (optional, for database)

Installation

  1. Clone the repository:

    git clone https://github.com/yusufipk/RepoHub.git
    cd RepoHub
    
  2. Install dependencies:

    npm install
    # or
    pnpm install
    
  3. Set up Environment Variables: Copy .env.example to .env and configure your database connection.

    cp .env.example .env
    
  4. Run the development server:

    npm run dev
    # or
    pnpm dev
    

    Open http://localhost:3000 with your browser to see the result.

🔄 API Usage

Syncing Repositories

You can trigger a repository sync using the API. This is useful for updating the package database.

Endpoint: POST /api/sync

Headers:

  • Content-Type: application/json
  • x-sync-secret: Your sync secret key (required if SYNC_SERVER_ONLY=true)

Body Parameters:

  • platform: The platform to sync. Options:
    • debian: Sync Debian packages (Official Repo)
    • ubuntu: Sync Ubuntu packages (Official Repo)
    • arch: Sync Arch Linux packages (Official Repo)
    • aur: Sync Arch User Repository (AUR) packages
    • fedora: Sync Fedora packages (Official Repo)
    • windows: Sync Windows packages (Winget)
    • macos: Sync macOS packages (Homebrew)
    • all: Sync all platforms

Example Request:

curl -X POST http://localhost:3000/api/sync \
  -H "Content-Type: application/json" \
  -H "x-sync-secret: your_secret_key" \
  -d '{"platform": "all"}'

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the project
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request
S
Description
No description provided
Readme
5 MiB
Languages
TypeScript 94.2%
JavaScript 3.8%
PLpgSQL 1.5%
CSS 0.5%