Files
Gemini Nexus Bot a905877c76 feat: bump version to 0.14.0
Includes all changes from this release cycle:
- Top header navigation (sidebar removed)
- Accounts screen decomposition and visual redesign
- Dev/prod environment isolation
- Usage Analytics with accurate averages, cost reporting, OpenRouter pricing
- Monitor moved to Usage with per-request token/cost tracking
- Clickable traffic logs with expandable JSON body viewer
- OpenCode IDE config in Quick Setup
- API Proxy reorganization (flattened tabs)
- CI/CD pipeline fixes (release config, Node version, pnpm alignment)
- Repository cleanup (~80MB of binaries removed)
2026-05-02 00:32:21 -03:00

269 lines
7.2 KiB
Markdown

# Contributing to Gemini Nexus
Thank you for considering contributing to Gemini Nexus! 🎉
Whether it's a bug report, feature suggestion, documentation improvement, or code contribution — all help is welcome.
---
## 📋 Table of Contents
- [Code of Conduct](#-code-of-conduct)
- [Getting Started](#-getting-started)
- [Development Setup](#-development-setup)
- [Making Changes](#-making-changes)
- [Commit Guidelines](#-commit-guidelines)
- [Pull Request Process](#-pull-request-process)
- [Code Style](#-code-style)
- [Reporting Issues](#-reporting-issues)
---
## 📜 Code of Conduct
This project is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
---
## 🚀 Getting Started
1. **Fork** the repository on GitHub
2. **Clone** your fork locally:
```bash
git clone https://github.com/YOUR_USERNAME/GeminiNexus.git
cd GeminiNexus
```
3. **Add the upstream remote**:
```bash
git remote add upstream https://github.com/evandrodevbr/GeminiNexus.git
```
---
## 💻 Development Setup
### Prerequisites
- **Node.js** v20 or higher
- **npm** (this project uses `package-lock.json`)
- **Git**
### Installation
```bash
# Install dependencies
npm install
# Start the app in development mode
npm start
```
### Available Scripts
| Command | Description |
| ---------------------- | ------------------------------------------------------- |
| `npm start` | Start the app in development mode (Electron + Vite HMR) |
| `npm run lint` | Run ESLint |
| `npm run format` | Check formatting with Prettier |
| `npm run format:write` | Auto-format code with Prettier |
| `npm run type-check` | Run TypeScript type check |
| `npm test` | Run unit tests with Vitest |
| `npm run test:e2e` | Run E2E tests with Playwright |
| `npm run test:all` | Run all tests (unit + E2E) |
| `npm run make` | Build production installers |
### Project Structure
```plaintext
src/
├── components/ # React UI components (Radix-based primitives in ui/)
├── hooks/ # Custom React hooks
├── ipc/ # Electron IPC + database handlers
├── layouts/ # Layout components (MainLayout + sidebar)
├── localization/ # i18n translation resources
├── routes/ # TanStack Router pages (index, usage, proxy, settings)
├── server/ # NestJS backend (proxy gateway service)
├── services/ # Service layer
├── types/ # TypeScript type definitions + Zod schemas
└── utils/ # Utility functions
```
---
## ✏️ Making Changes
1. **Create a branch** from `main`:
```bash
git checkout -b feat/your-feature-name
# or
git checkout -b fix/your-bug-fix
```
2. **Make your changes**, then commit:
```bash
git add .
git commit -m "feat: add amazing new feature"
```
3. **Keep your branch up to date**:
```bash
git fetch upstream
git rebase upstream/main
```
---
## 📝 Commit Guidelines
We follow [Conventional Commits](https://www.conventionalcommits.org/). Commits are analyzed by `semantic-release` to automatically determine version bumps and generate changelogs.
### Format
```
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
```
### Types
| Type | Description | Release |
| ---------- | ----------------------------------- | ---------- |
| `feat` | A new feature | **minor** |
| `fix` | A bug fix | **patch** |
| `perf` | Performance improvement | **patch** |
| `refactor` | Code change (no bug fix or feature) | **patch** |
| `docs` | Documentation only | no release |
| `style` | Formatting, whitespace | no release |
| `test` | Adding or fixing tests | no release |
| `chore` | Build process, tooling | no release |
| `ci` | CI/CD changes | no release |
### Breaking Changes
Add `BREAKING CHANGE:` in the footer or `!` after the type to trigger a **major** release:
```
feat!: remove legacy plaintext storage
BREAKING CHANGE: all accounts must re-authenticate after upgrade.
```
### Examples
```
feat(proxy): add Anthropic /v1/messages endpoint
fix(usage): handle SQL SUM(null) in empty date ranges
docs(readme): add Chinese and Spanish translations
ci: normalize Node.js to v20 across all workflows
```
---
## 🔄 Pull Request Process
### Before Opening a PR
1. Run the quality checks:
```bash
npm run lint
npm run format:write
npm run type-check
npm test
```
2. Update documentation if you changed functionality
3. Add tests for new features
### PR Checklist
- [ ] My code follows the project's style guidelines
- [ ] I have performed a self-review of my code
- [ ] I have commented hard-to-understand areas
- [ ] I have updated related documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix or feature works
- [ ] All existing tests pass locally
### Review Process
- PRs require at least one maintainer approval
- CI must pass (lint, type-check, unit tests)
- Squash-merge is preferred for clean history
---
## 🎨 Code Style
### TypeScript
- Use TypeScript for all new code — avoid `any`
- Use Zod for runtime validation
- Prefer `lodash-es` named imports over native utilities
- Use `@/` alias for `src/` imports
### React Components
- Functional components with hooks only
- Use Radix UI primitives for accessible components
- TypeScript interfaces for props
- Follow existing component structure (`components/ComponentName.tsx`)
### Styling
- Tailwind CSS v4 utility classes
- Use `clsx` + `tailwind-merge` for conditional classes
- Follow the Gemini Nexus design tokens (`rounded-xl`, `border-white/[0.06]`)
### Import Order
```typescript
// 1. React and core libraries
import React, { useEffect } from 'react';
// 2. External dependencies (alphabetical)
import { useTranslation } from 'react-i18next';
// 3. Internal imports (using @ alias)
import { Card } from '@/components/ui/card';
```
---
## 🐛 Reporting Issues
### Bug Reports
[Create a bug report](https://github.com/evandrodevbr/GeminiNexus/issues/new?labels=bug&template=bug_report.md) with:
- Clear title describing the issue
- Steps to reproduce the behavior
- Expected vs actual behavior
- Screenshots if applicable
- Environment details (OS, app version, Node.js version)
### Feature Requests
[Suggest a feature](https://github.com/evandrodevbr/GeminiNexus/issues/new?labels=enhancement&template=feature_request.md) with:
- Clear description of the feature
- Use case — why is this needed?
- Possible implementation ideas (optional)
---
## 🙏 Thank You
Your contributions make Gemini Nexus better for everyone. Thank you for your time!
If you have questions, feel free to [open a discussion](https://github.com/evandrodevbr/GeminiNexus/discussions) or reach out to the maintainers.