Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Lint

on:
pull_request:
branches: [main]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
- run: pnpm i
- run: pnpm lint
1 change: 1 addition & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pnpm exec lint-staged
46 changes: 46 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"prettier.enable": false,
"editor.formatOnSave": false,

"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never"
},

"eslint.rules.customizations": [
{ "rule": "style/*", "severity": "off", "fixable": true },
{ "rule": "format/*", "severity": "off", "fixable": true },
{ "rule": "*-indent", "severity": "off", "fixable": true },
{ "rule": "*-spacing", "severity": "off", "fixable": true },
{ "rule": "*-spaces", "severity": "off", "fixable": true },
{ "rule": "*-order", "severity": "off", "fixable": true },
{ "rule": "*-dangle", "severity": "off", "fixable": true },
{ "rule": "*-newline", "severity": "off", "fixable": true },
{ "rule": "*quotes", "severity": "off", "fixable": true },
{ "rule": "*semi", "severity": "off", "fixable": true }
],

"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
"html",
"markdown",
"json",
"jsonc",
"yaml",
"toml",
"xml",
"gql",
"graphql",
"astro",
"svelte",
"css",
"less",
"scss",
"pcss",
"postcss"
]
}
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,19 @@ PCMate is an intelligent PC configuration tool that leverages AI to suggest opti
## Key Features

### AI-Powered Recommendations

- 🤖 Smart component suggestions using Google Gemini
- 💡 Build optimization for different use cases (gaming, productivity, etc.)
- ⚡ Real-time compatibility checking

### Multi-Language Support

- 🌐 Switch between multiple languages
- 📦 Comprehensive hardware terminology translations
- 🔄 Dynamic content switching

### Core Functionality

- 🛠️ Interactive PC building interface
- 💰 Budget-based component filtering
- 📊 Performance estimation
Expand All @@ -23,6 +26,7 @@ PCMate is an intelligent PC configuration tool that leverages AI to suggest opti
## Technology Stack

### Frontend

- **Next.js 15** (App Router)
- **TypeScript**
- **shadcn/ui** (Beautifully designed components)
Expand All @@ -32,17 +36,20 @@ PCMate is an intelligent PC configuration tool that leverages AI to suggest opti
- **Zod** (Schema validation)

### Backend

- **Next.js API Routes**
- **Google Gemini API** (AI recommendations)

### Development Tools

- **ESLint** + **Prettier** (Code quality)
- **Husky** (Git hooks)
- **GitHub Actions** (CI/CD)

## Getting Started

### Prerequisites

- Node.js 18+
- Google Gemini API key
- Git
Expand All @@ -53,16 +60,22 @@ PCMate is an intelligent PC configuration tool that leverages AI to suggest opti
```bash
git clone https://github.com/jsdevrazuislam/pc-mate.git
cd pc-mate
```
2. **Install dependencies**:
```bash
pnpm install
```
3. **Set up environment variables**:
```bash
GEMINI_API_KEY=your_api_key_here
```
4. **Run the development server**:
```bash
pnpm dev
```

# Project Structure

```bash
pc-mate/
├── app/
Expand All @@ -82,4 +95,5 @@ pc-mate/
├── lib/ # Utility functions
│ ├── gemini.ts # Gemini integration
├── types/ # TypeScript types
├── public/ # Static assets
├── public/ # Static assets
```
14 changes: 8 additions & 6 deletions app/api/build/route.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NextResponse } from "next/server";

import { generatePCBuildRecommendation } from "@/lib/gemini";

export async function POST(req: Request) {
Expand All @@ -11,10 +12,10 @@ export async function POST(req: Request) {
const requestData: PCBuilderRequest = await req.json();

if (
!requestData.budget ||
!requestData.currency ||
!requestData.location ||
!requestData.usages
!requestData.budget
|| !requestData.currency
|| !requestData.location
|| !requestData.usages
) {
return NextResponse.json({
error: "Missing required fields",
Expand All @@ -24,10 +25,11 @@ export async function POST(req: Request) {

const recommendation = await generatePCBuildRecommendation(
requestData,
apiKey
apiKey,
);
return NextResponse.json(recommendation);
} catch (error) {
}
catch (error) {
console.error("PC Build API error:", error);
return NextResponse.json({
error: error instanceof Error ? error.message : "Unknown error occurred",
Expand Down
Loading