Skip to content
Open
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
35 changes: 35 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

# JSON files
[*.json]
indent_size = 2

# Markdown files
[*.md]
trim_trailing_whitespace = false

# YAML files
[*.{yaml,yml}]
indent_size = 2

# TypeScript and JavaScript files
[*.{ts,tsx,js,jsx}]
indent_size = 2
quote_type = single

# Shell scripts
[*.sh]
indent_size = 2
end_of_line = lf
49 changes: 49 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Environment Configuration Template
# Copy this file to .env.local and fill in the actual values
# DO NOT commit .env.local to git (it's in .gitignore)

# ============================================================================
# API Keys & Credentials
# ============================================================================

# Google Gemini AI API Key
# Get your key from: https://ai.google.dev/
# Required for AI chat features to work
VITE_GEMINI_API_KEY=your_gemini_api_key_here

# ============================================================================
# Build Configuration
# ============================================================================

# Base path for the application (used in Vite)
# Default: /
# For GitHub Pages deployment in subdirectory: /ace/
# For development: /
VITE_BASE_PATH=/

# ============================================================================
# Node Environment
# ============================================================================

# Node environment (set automatically by npm scripts, usually don't need to set)
# Options: development, production, test
NODE_ENV=development

# ============================================================================
# Feature Flags
# ============================================================================

# Enable debug mode for additional console logging
# Options: true, false (default: false)
VITE_DEBUG_MODE=false

# Enable analytics collection
# Options: true, false (default: false in dev, true in production)
VITE_ANALYTICS_ENABLED=false

# ============================================================================
# Development Helpers
# ============================================================================

# Uncomment and set any of the above to override defaults during development
# Example: VITE_DEBUG_MODE=true npm run dev
35 changes: 35 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Dependencies
node_modules/
package-lock.json

# Build outputs
dist/
build/
*.production.min.js

# Cache directories
.cache/
.vite/
.eslintcache

# Environment files
.env
.env.local
.env.*.local

# Config files
vite.config.ts.timestamp-*

# Test coverage
coverage/

# IDE
.vscode/
.idea/

# System files
.DS_Store
*.log

# GitHub
.github/
123 changes: 123 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
{
"env": {
"browser": true,
"es2022": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended",
"plugin:import/recommended",
"plugin:import/typescript",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": "latest",
"sourceType": "module",
"project": "./tsconfig.json"
},
"plugins": ["@typescript-eslint", "react", "react-hooks", "jsx-a11y", "import"],
"settings": {
"react": {
"version": "detect"
},
"import/resolver": {
"typescript": true,
"node": true
}
},
"rules": {
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}
],
"@typescript-eslint/consistent-type-imports": [
"warn",
{
"prefer": "type-imports"
}
],
"react/react-in-jsx-scope": "off",
"react/prop-types": "off",
"react/jsx-uses-react": "off",
"react/jsx-no-target-blank": [
"warn",
{
"allowReferrer": false
}
],
"react/self-closing-comp": "warn",
"react/jsx-curly-brace-presence": [
"warn",
{
"props": "never",
"children": "never"
}
],
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
"jsx-a11y/anchor-is-valid": "warn",
"jsx-a11y/click-events-have-key-events": "warn",
"jsx-a11y/no-static-element-interactions": "warn",
"jsx-a11y/alt-text": "warn",
"import/order": [
"warn",
{
"groups": ["builtin", "external", "internal", "parent", "sibling", "index"],
"pathGroups": [
{
"pattern": "react",
"group": "builtin",
"position": "before"
},
{
"pattern": "@/**",
"group": "internal"
}
],
"pathGroupsExcludedImportTypes": ["react"],
"newlines-between": "never",
"alphabetize": {
"order": "asc",
"caseInsensitive": true
}
}
],
"import/no-unresolved": "off",
"import/named": "off",
"import/no-named-as-default": "off",
"import/no-named-as-default-member": "off",
"no-console": ["warn", { "allow": ["warn", "error"] }],
"prefer-const": "warn",
"no-var": "error",
"eqeqeq": ["warn", "always"],
"curly": ["warn", "multi-line"],
"no-unused-expressions": "warn"
},
"overrides": [
{
"files": ["*.tsx", "*.ts"],
"rules": {
"@typescript-eslint/explicit-function-return-type": "off"
}
},
{
"files": ["vite.config.ts", "*.config.ts"],
"rules": {
"import/no-default-export": "off"
}
}
]
}
Loading
Loading