{"id":35843969,"url":"https://github.com/thareekanvar/quill","last_synced_at":"2026-01-13T21:58:51.183Z","repository":{"id":331774705,"uuid":"1128412161","full_name":"thareekanvar/quill","owner":"thareekanvar","description":"A modern, web-based PostgreSQL database administration tool. Browse tables, edit records, run queries, and manage your database with an intuitive interface. Secure, fast, and easy to use.","archived":false,"fork":false,"pushed_at":"2026-01-11T03:03:22.000Z","size":830,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T10:51:49.882Z","etag":null,"topics":["dashboard","database","postgresql"],"latest_commit_sha":null,"homepage":"http://quill.thareekanvar.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thareekanvar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":null,"dco":null,"cla":null}},"created_at":"2026-01-05T15:45:53.000Z","updated_at":"2026-01-11T03:03:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/thareekanvar/quill","commit_stats":null,"previous_names":["thareekanvar/quill"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/thareekanvar/quill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thareekanvar%2Fquill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thareekanvar%2Fquill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thareekanvar%2Fquill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thareekanvar%2Fquill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thareekanvar","download_url":"https://codeload.github.com/thareekanvar/quill/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thareekanvar%2Fquill/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: 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":["dashboard","database","postgresql"],"created_at":"2026-01-08T05:11:36.999Z","updated_at":"2026-01-13T21:58:51.178Z","avatar_url":"https://github.com/thareekanvar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quill - PostgreSQL Database Administration Tool\n\nA modern, web-based PostgreSQL database administration tool. Browse tables, edit records, run queries, and manage your database with an intuitive interface. Secure, fast, and easy to use.\n\nBuilt with [Next.js](https://nextjs.org), React, and TypeScript. Uses a client-server architecture where the browser UI communicates with Next.js API routes that proxy connections to PostgreSQL.\n\n\u003cdiv align=\"center\"\u003e\n\n### 🌐 [Live Demo](http://quill.thareekanvar.com/) - Try it now!\n\n\u003ca href=\"http://quill.thareekanvar.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/🌐_Live_Demo-FF6B6B?style=for-the-badge\u0026logo=netlify\" alt=\"Live Demo\" /\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"public/dashboard.png\" alt=\"Quill Dashboard\" /\u003e\n\u003c/div\u003e\n\n## ✨ Features\n\n### Core Functionality\n\n- **Database Management** - Connect to multiple PostgreSQL databases with encrypted local credential storage\n- **Table Browser** - Explore tables, schemas, columns, indexes, and foreign keys\n- **Data Operations** - Create, read, update, and delete records with password-protected mutations\n- **SQL Console** - Execute custom SQL queries with syntax highlighting, query history, and transaction support\n- **Schema Management** - View and manage database schemas, create tables, and modify structure\n- **AI Assistant** - Chat with AI to generate SQL queries, explore data, and understand your database schema using natural language\n\n### Advanced Features\n\n- **Advanced Filtering** - Multi-type filters (text, number, date, boolean, foreign keys) with complex query building\n- **Custom Dashboards** - Create dashboard cards and charts from database data or custom SQL queries\n- **Data Visualization** - Build interactive charts (line, bar, area) with date range filtering and trend indicators\n- **Global Search** - Search across all tables and data in your database\n- **Multi-language Support** - English, French, and German translations\n- **Dark/Light Theme** - Toggle between themes\n- **Customizable Sidebar** - Organize tables with custom icons, names, and drag-and-drop ordering\n\n## 🚀 Getting Started\n\n### Deploy\n\nDeploy this project to your favorite platform with one click:\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://vercel.com/new/clone?repository-url=https://github.com/thareekanvar/quill\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n  \u003cimg src=\"https://vercel.com/button\" alt=\"Deploy with Vercel\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://app.netlify.com/start/deploy?repository=https://github.com/thareekanvar/quill\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n  \u003cimg src=\"https://www.netlify.com/img/deploy/button.svg\" alt=\"Deploy to Netlify\" /\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n**Note:** \n- **Netlify**: Configuration is handled automatically via `netlify.toml`. Make sure to set your environment variables in the Netlify dashboard.\n\n### Prerequisites\n\n- Node.js 18+\n- PostgreSQL database\n- pnpm (recommended)\n- Google AI API key (for AI chat feature) - Get one from [Google AI Studio](https://aistudio.google.com/apikey)\n\n### Installation\n\n1. Clone the repository:\n\n   ```bash\n   git clone https://github.com/thareekanvar/quill.git\n   cd postadmin\n   ```\n\n2. Install dependencies:\n\n   ```bash\n   pnpm install\n   ```\n\n3. Set up environment variables:\n\n   Create a `.env.local` file in the root directory:\n   ```bash\n   GOOGLE_GENERATIVE_AI_API_KEY=your_google_ai_api_key_here\n   ```\n   \n   **Note:** The AI chat feature requires a Google AI API key. You can get one from [Google AI Studio](https://aistudio.google.com/apikey).\n\n4. Run the development server:\n\n   ```bash\n   pnpm dev\n   ```\n\n5. Open [http://localhost:3000](http://localhost:3000) and connect to your PostgreSQL database.\n\n## 🏗️ Architecture\n\nQuill uses a **client-server architecture**:\n\n- **Client-side (Browser)**: \n  - React UI and user interactions\n  - Encrypted credential storage in IndexedDB (AES encryption)\n  - Local state management and caching\n\n- **Server-side (Next.js API Routes)**:\n  - Acts as a proxy between the browser and PostgreSQL\n  - Executes database queries using the `pg` library\n  - Handles connection pooling and query execution\n\n**Important**: Browsers cannot directly connect to PostgreSQL databases due to protocol and security limitations. The application requires a server component to proxy database connections. Connection strings are sent to the server over HTTPS when executing queries.\n\n## 📖 Usage\n\n- **Connect**: Enter your PostgreSQL connection string on the login page\n- **Browse**: Select tables from the sidebar to view and edit data\n- **Filter \u0026 Sort**: Use the filter panel and column headers to query data\n- **Query**: Execute custom SQL queries in the SQL console\n- **Dashboard**: Create custom cards and charts to visualize your data\n- **Schema**: Manage database structure through the schema management interface\n\n## 🛠️ Technology Stack\n\n- **Framework**: Next.js 16 (App Router)\n- **UI**: React 19, TypeScript, Tailwind CSS, shadcn/ui\n- **State**: Zustand, TanStack Query\n- **Database**: PostgreSQL (via `pg`)\n- **Other**: CryptoJS (encryption), Recharts (visualization), dnd-kit (drag \u0026 drop)\n\n## 📁 Project Structure\n\n```text\npostadmin/\n├── app/              # Next.js app directory (routes \u0026 API)\n├── components/       # React components\n│   ├── auth/        # Authentication\n│   ├── dashboard/    # Dashboard components\n│   └── ui/          # UI components (shadcn/ui)\n├── hooks/           # Custom React hooks\n├── lib/             # Utilities\n│   ├── db/         # IndexedDB \u0026 encryption\n│   ├── helpers/    # Helper functions\n│   ├── postgres/   # PostgreSQL client\n│   ├── stores/     # Zustand stores\n│   └── translations/ # i18n\n└── types/           # TypeScript definitions\n```\n\n## 🔒 Security\n\n### Credential Storage\n- Database credentials are **encrypted with AES-256** and stored locally in your browser's IndexedDB\n- Encryption uses PBKDF2 key derivation (10,000 iterations) for enhanced security\n- Credentials are encrypted using a user-provided password before storage\n\n### Data Transmission\n- Connection strings are sent to the server over **HTTPS** when executing queries\n- The server acts as a proxy and does not log connection strings\n- All API requests use HTTPS encryption in transit\n\n### Security Best Practices\n- **Use HTTPS in production** - Never deploy without SSL/TLS encryption\n- **Self-host for sensitive databases** - For maximum security, deploy on your own infrastructure\n- **Review server logs** - Ensure your deployment doesn't log connection strings\n- All mutation operations require password confirmation\n- Never commit database credentials to version control\n\n### Security Considerations\n⚠️ **Important**: While credentials are encrypted for local storage, they are decrypted and sent to the server when executing database operations. This is necessary because:\n- Browsers cannot directly connect to PostgreSQL (protocol limitations)\n- The server component is required to proxy database connections\n- Connection strings are transmitted over HTTPS but are visible to the server\n\nFor production deployments with sensitive data, consider:\n- Self-hosting on your own infrastructure\n- Using a reverse proxy with additional security layers\n- Implementing network-level restrictions\n- Regular security audits of your deployment\n\n## 📄 License\n\nThis project is licensed under a **Non-Commercial Open Source License**.\n\n- ✅ **Free to use** - Use for any non-commercial purpose\n- ✅ **Free to modify** - Modify the code to suit your needs\n- ❌ **Cannot sell** - Cannot be sold or used in commercial products without permission\n- 🔄 **Contribute changes** - Submit Pull Requests for modifications\n- 📝 **Keep it open** - Distribution must include source code and license\n\nFor commercial licensing inquiries, please contact the project maintainers.\n\n## 🤝 Contributing\n\nContributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n1. Fork the repository\n2. Create your feature branch\n3. Make your changes and test thoroughly\n4. Submit a Pull Request with a clear description\n\nBy contributing, you agree that your contributions will be licensed under the same Non-Commercial Open Source License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthareekanvar%2Fquill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthareekanvar%2Fquill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthareekanvar%2Fquill/lists"}