{"id":49557895,"url":"https://github.com/eshaan-nair/synq","last_synced_at":"2026-05-03T06:08:54.218Z","repository":{"id":353025156,"uuid":"1216688130","full_name":"Eshaan-Nair/Synq","owner":"Eshaan-Nair","description":"SYNQ: ContextBridge — persistent memory layer for AI agents. SYNQ is a Chrome extension + local backend that gives your AI assistant a memory it was never designed to have.","archived":false,"fork":false,"pushed_at":"2026-05-01T19:59:42.000Z","size":15705,"stargazers_count":2,"open_issues_count":0,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-01T20:16:45.332Z","etag":null,"topics":["ai-tools","backend","chrome-extension","groq-ai-api","javascript","memory","neo4j-graph","productivity","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Eshaan-Nair.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-04-21T06:26:25.000Z","updated_at":"2026-05-01T19:59:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Eshaan-Nair/Synq","commit_stats":null,"previous_names":["eshaan-nair/synq"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Eshaan-Nair/Synq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eshaan-Nair%2FSynq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eshaan-Nair%2FSynq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eshaan-Nair%2FSynq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eshaan-Nair%2FSynq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Eshaan-Nair","download_url":"https://codeload.github.com/Eshaan-Nair/Synq/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eshaan-Nair%2FSynq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32559718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T03:21:47.309Z","status":"ssl_error","status_checked_at":"2026-05-03T03:21:43.884Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["ai-tools","backend","chrome-extension","groq-ai-api","javascript","memory","neo4j-graph","productivity","typescript"],"created_at":"2026-05-03T06:08:52.008Z","updated_at":"2026-05-03T06:08:54.210Z","avatar_url":"https://github.com/Eshaan-Nair.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"./dashboard/icon48.png\" width=\"300\"\u003e\n\n# SYNQ\n\n### Your AI forgets. SYNQ makes it remember.\n\nEvery time you open a new chat, your AI starts from zero. You re-explain your stack, your decisions, your bugs — over and over. **SYNQ eliminates this permanently** by giving your AI assistant persistent, cross-session memory.\n\n\u003cbr/\u003e\n\n[![Stars](https://img.shields.io/github/stars/Eshaan-Nair/Synq?style=for-the-badge\u0026logo=github\u0026labelColor=0B0E14\u0026color=6366F1)](https://github.com/Eshaan-Nair/Synq/stargazers)\n[![Forks](https://img.shields.io/github/forks/Eshaan-Nair/Synq?style=for-the-badge\u0026logo=github\u0026labelColor=0B0E14\u0026color=06B6D4)](https://github.com/Eshaan-Nair/Synq/forks)\n[![Issues](https://img.shields.io/github/issues/Eshaan-Nair/Synq?style=for-the-badge\u0026logo=github\u0026labelColor=0B0E14\u0026color=02C39A)](https://github.com/Eshaan-Nair/Synq/issues)\n[![CI](https://img.shields.io/github/actions/workflow/status/Eshaan-Nair/Synq/ci.yml?style=for-the-badge\u0026label=CI\u0026labelColor=0B0E14\u0026color=02C39A)](https://github.com/Eshaan-Nair/Synq/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-F8FAFC?style=for-the-badge\u0026labelColor=0B0E14)](LICENSE)\n[![Version](https://img.shields.io/badge/version-1.3.2-6366F1?style=for-the-badge\u0026labelColor=0B0E14)](CHANGELOG.md)\n\n\u003cbr/\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"https://img.shields.io/badge/Chrome-MV3-6366F1?style=flat-square\u0026logo=googlechrome\u0026logoColor=white\u0026labelColor=0B0E14\" alt=\"Chrome\"/\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"https://img.shields.io/badge/Neo4j-5.18-06B6D4?style=flat-square\u0026logo=neo4j\u0026logoColor=white\u0026labelColor=0B0E14\" alt=\"Neo4j\"/\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"https://img.shields.io/badge/ChromaDB-0.6.3-02C39A?style=flat-square\u0026logo=databricks\u0026logoColor=white\u0026labelColor=0B0E14\" alt=\"ChromaDB\"/\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"https://img.shields.io/badge/Groq-LLaMA_3.1-F8FAFC?style=flat-square\u0026labelColor=0B0E14\" alt=\"Groq\"/\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"https://img.shields.io/badge/React-19-61DAFB?style=flat-square\u0026logo=react\u0026logoColor=white\u0026labelColor=0B0E14\" alt=\"React\"/\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"https://img.shields.io/badge/TypeScript-Strict-3178C6?style=flat-square\u0026logo=typescript\u0026logoColor=white\u0026labelColor=0B0E14\" alt=\"TypeScript\"/\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n**Works with Claude · ChatGPT · Gemini — simultaneously, on the same machine.**\n\n*Switch accounts. Switch AIs. Switch chats. SYNQ still remembers everything.*\n\n\nhttps://github.com/user-attachments/assets/ab003d01-3e36-405c-a7a4-9eae417b77ca\n\n\n\u003c/div\u003e\n\n---\n\n## The Problem\n\nYou're deep into a complex project. You've had 12 conversations with Claude about your architecture, your auth flow, your database schema, and the obscure bug you cracked at 2 AM.\n\nThen you open a new chat.\n\n**It's all gone.** You spend the next 20 minutes re-explaining your stack, what you decided, what you already tried. Every conversation starts from zero. You're not talking to an AI with memory — you're talking to a stranger who happens to be very smart.\n\n## The Solution\n\nSYNQ is a **Chrome extension + local backend** that captures your conversations, distills them into a semantic knowledge graph, and **automatically injects the most relevant context into every new prompt** — using a zero-loss RAG pipeline.\n\n```\n Without SYNQ                           With SYNQ\n ─────────────────────────────          ─────────────────────────────\n New chat → blank slate                 New chat → instant context\n Re-explain your stack                  AI already knows your stack\n Re-explain your decisions              AI remembers your decisions\n Re-explain what you tried              AI recalls past attempts\n 20 minutes wasted                      Start working immediately\n```\n\nWhen you type a prompt, SYNQ silently prepends the most relevant context from your history:\n\n```\n[SYNQ: Relevant context from your previous session]\n### Context 1 (relevance: 87%)\nWe decided to use Mongoose for the ODM and React Query for server state.\nThe JWT refresh flow is currently blocked by a frontend state bug.\n[END SYNQ CONTEXT]\n\nHow do we fix the refresh token issue?\n```\n\n**The AI responds as if it was in every conversation with you from the start.**\n\n---\n\n## Table of Contents\n\n- [Key Features](#key-features)\n- [How It Works](#how-it-works)\n- [Architecture](#architecture)\n- [Quick Start](#quick-start)\n- [Usage Guide](#usage-guide)\n- [Tech Stack](#tech-stack)\n- [Privacy \u0026 Security](#privacy--security)\n- [What's New in v1.3.2](#whats-new-in-v132)\n- [Self-Hosting](#self-hosting)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Key Features\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Auto-Connect RAG\nIntercepts every prompt and injects relevant context automatically. Zero manual steps after initial setup.\n\n### 100% Local \u0026 Private\nOllama, ChromaDB, and Neo4j run on your machine. Your data never leaves your network.\n\n### Zero Data Loss\nSliding window chunker preserves every word — no filtering, no minimum length, no information dropped.\n\n### Privacy Scrubbing\nAPI keys, JWTs, emails, connection strings auto-redacted before any text reaches external services.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Semantic Knowledge Graph\n22 entity types, 20+ relation types — captures both technical architecture and personal context.\n\n### D3.js Graph Visualization\nForce-directed graph with degree-scaled nodes, curved edges, hover tooltips, and zoom controls.\n\n### ⏯Pause / Resume Toggle\nSuspend context injection without losing session state. Resume instantly when ready.\n\n### Multi-Platform\nClaude, ChatGPT, and Gemini — all supported simultaneously with platform-specific selectors.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## How It Works\n\n```\n  ┌─────────────────────────────────────────────────────────────────┐\n  │  1. CAPTURE                                                     │\n  │     Finish a chat → click Save Chat in the extension popup      │\n  │     Extension scrapes full conversation (user + AI turns)       │\n  │     FNV-1a fingerprint deduplication prevents double-saves      │\n  └─────────────────────────┬───────────────────────────────────────┘\n                            │\n  ┌─────────────────────────▼───────────────────────────────────────┐\n  │  2. PRIVACY SCRUB                                               │\n  │     API keys, JWTs, emails, connection strings → [REDACTED]     │\n  │     Happens in the browser before anything is transmitted       │\n  └─────────────────────────┬───────────────────────────────────────┘\n                            │\n              ┌─────────────┴─────────────┐\n              │                           │\n  ┌───────────▼──────────┐   ┌────────────▼─────────────┐\n  │  3A. VECTOR TRACK    │   │  3B. GRAPH TRACK         │\n  │  (RAG — all local)   │   │  (Knowledge Graph)       │\n  │                      │   │                          │\n  │  Sliding window      │   │  Groq LLaMA 3.1 →       │\n  │  chunker (300w/80ov) │   │  summarize facts →       │\n  │  → Ollama embeddings │   │  extract triples →       │\n  │  → ChromaDB cosine   │   │  Neo4j MERGE             │\n  └───────────┬──────────┘   └────────────┬─────────────┘\n              │                           │\n              └─────────────┬─────────────┘\n                            │\n  ┌─────────────────────────▼───────────────────────────────────────┐\n  │  4. AUTO-CONNECT (every prompt, automatically)                  │\n  │     User types → intercepted → ChromaDB cosine search →        │\n  │     Top-3 chunks prepended to prompt → AI gets full context     │\n  └─────────────────────────────────────────────────────────────────┘\n```\n\n\u003e **Full pipeline details:** [RAG_PIPELINE.md](RAG_PIPELINE.md) · **Architecture deep-dive:** [ARCHITECTURE.md](ARCHITECTURE.md)\n\n---\n\n## Architecture\n\n```\nSYNQ/\n├── backend/\n│   └── src/\n│       ├── routes/             # chat · context · graph · rag\n│       ├── services/           # chroma · chunker · embeddings\n│       │                       # extractor · mongo · neo4j\n│       └── utils/              # logger · privacy\n├── dashboard/\n│   └── src/\n│       ├── api/                # rag · synq\n│       ├── components/         # ChatViewer · GraphView\n│       └── App.tsx\n├── extension/\n│   ├── popup/                  # popup.html · popup.ts · popup.css\n│   └── src/\n│       ├── platforms/          # claude · chatgpt · gemini · index\n│       ├── content.ts          # DOM scraping, prompt interception\n│       └── background.ts       # service worker, backend proxy\n├── scripts/\n│   └── check-selectors.js      # Playwright smoke test\n├── docker-compose.yml          # Neo4j + MongoDB + ChromaDB\n└── start.sh / start.bat        # One-command launcher\n```\n\n### Service Map\n\n| Service | Port | Purpose |\n|:---|:---|:---|\n| **Backend** | `3001` | Express API — routes, rate limiting, security headers |\n| **Neo4j** | `7474` / `7687` | Knowledge graph — HTTP browser + Bolt protocol |\n| **MongoDB** | `27017` | Sessions, FullChat storage, active session singleton |\n| **ChromaDB** | `8000` | Vector store — cosine similarity with nomic-embed-text |\n| **Ollama** | `11434` | Local embedding generation — 768-dim vectors |\n| **Dashboard** | `5173` | React dev server — graph visualization, session management |\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n| Requirement | Link |\n|:---|:---|\n| **Node.js 20 LTS** | [nodejs.org](https://nodejs.org) |\n| **Docker Desktop** | [docker.com](https://www.docker.com/products/docker-desktop) (WSL2 on Windows) |\n| **Ollama** | [ollama.com](https://ollama.com) — then run `ollama pull nomic-embed-text` |\n| **Groq API Key** | [console.groq.com](https://console.groq.com) — free, no credit card |\n\n### 1. Clone \u0026 Configure\n\n```bash\ngit clone https://github.com/Eshaan-Nair/Synq.git\ncd Synq\n\n# macOS / Linux\ncp backend/.env.example backend/.env\n\n# Windows\ncopy backend\\.env.example backend\\.env\n```\n\nOpen `backend/.env` and set your `GROQ_API_KEY`. All other values have working local defaults.\n\n### 2. Start Everything (One Command)\n\n```bash\n# macOS / Linux\nchmod +x start.sh \u0026\u0026 ./start.sh\n\n# Windows\nstart.bat\n```\n\nThe start script will:\n- ✅ Check for Ollama and pull `nomic-embed-text` if missing\n- ✅ Start Docker containers (Neo4j + MongoDB + ChromaDB)\n- ✅ Install dependencies and build the extension\n- ✅ Launch backend (port 3001) and dashboard (port 5173)\n- ✅ Health-check the backend before proceeding\n\n### 3. Load the Chrome Extension\n\n1. Open Chrome → `chrome://extensions`\n2. Enable **Developer mode** (toggle, top-right)\n3. Click **Load unpacked** → select the `Synq/extension` folder\n4. The **SYNQ** icon appears in your toolbar\n\nOpen Claude, ChatGPT, or Gemini — the SYNQ badge appears automatically.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAlternative: Manual Setup (separate terminals)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Terminal 1 — Backend\ncd backend \u0026\u0026 npm install \u0026\u0026 npm run dev\n\n# Terminal 2 — Dashboard\ncd dashboard \u0026\u0026 npm install \u0026\u0026 npm run dev\n\n# Build extension (one time)\ncd extension \u0026\u0026 npm install \u0026\u0026 npm run build\n\n# Start databases\ndocker compose up -d\n\n# Start Ollama (if not running)\nollama serve\n```\n\n\u003c/details\u003e\n\n---\n\n## Usage Guide\n\n### Saving a Conversation\n\n1. Have a conversation on Claude, ChatGPT, or Gemini\n2. Click the **SYNQ** icon in the Chrome toolbar\n3. Enter a project name (e.g., `AuthService v2`) and click **Save Chat**\n4. SYNQ scrubs PII, chunks the conversation, embeds it locally, and runs graph extraction — typically under 5 seconds\n\n### Auto-Connect (RAG) — The Main Workflow\n\nOnce a session is saved and active, **SYNQ auto-connects every time you open a supported platform**. Type your next prompt normally — SYNQ searches its vector store and prepends the most relevant context before sending.\n\n**To pause** injection without losing your session: click **Pause SYNQ** in the popup.\n\n### Classic Inject — For Cold Starts\n\nClick **Inject Context (one-time)** in the popup. SYNQ pulls the structured project summary from the knowledge graph and pastes it directly into the chat input — you send it manually to prime the conversation.\n\n### Dashboard\n\nOpen **http://localhost:5173** to access:\n\n| Tab | What It Shows |\n|:---|:---|\n| **Graph** | Interactive D3.js force graph — hover nodes to see connections and labels |\n| **History** | All extracted semantic triples with timestamps, newest first |\n| **Chat** | Full saved conversation with color-coded user/assistant bubbles |\n\nUse **Load into Extension** to set any session as the active context across all open AI tabs.\n\n---\n\n## Tech Stack\n\n| Layer | Technology | Notes |\n|:---|:---|:---|\n| **Extension** | TypeScript, Chrome Manifest V3 | Content scripts, service worker, Shadow DOM |\n| **Backend API** | Node.js, Express 5, TypeScript | Rate limiting, helmet, CORS, input validation |\n| **Graph Database** | Neo4j 5.18 | Typed triples, MERGE idempotency |\n| **Vector Database** | ChromaDB 0.6.3 (cosine) | Local, persistent, pinned version |\n| **Embeddings** | Ollama `nomic-embed-text` | 768-dim, CPU-only, ~270MB, parallel generation |\n| **LLM Processing** | Groq LLaMA 3.1 8B Instant | Free tier, fact extraction + graph summarization |\n| **Dashboard UI** | React 19, Vite 7, D3.js v7 | Force graph, TypeScript strict mode |\n| **Infrastructure** | Docker Compose | Named volumes, pinned image versions |\n| **Testing** | Jest + ts-jest | Unit tests for chunker, privacy scrubber, RAG |\n| **CI/CD** | GitHub Actions | Backend build+test, dashboard build, extension build |\n\n---\n\n## Privacy \u0026 Security\n\n**Your data stays on your machine.** All conversation data, embeddings, and graph triples are stored in local Docker volumes. Nothing syncs externally.\n\nThe only external service is **Groq**, used solely for graph triple extraction — and the text sent there is PII-scrubbed first. RAG chunking, embedding, and retrieval are 100% local.\n\n| Control | Implementation |\n|:---|:---|\n| **Auto-redaction** | API keys, JWTs, emails, connection strings scrubbed before transmission |\n| **Rate limiting** | 200 req/min global · 10 req/min on `/api/chat/save` |\n| **CORS locked** | Only `localhost:5173`, `localhost:4173`, and `chrome-extension://` |\n| **Input validation** | All routes validate sessionId, platform, text length |\n| **Helmet headers** | Security headers on every response |\n| **Shared secret** | Optional `X-SYNQ-Secret` header for request authentication |\n| **Opt-in only** | SYNQ reads the DOM only when you save a chat or Auto-Connect is active |\n\n\u003e See [SECURITY.md](SECURITY.md) for the vulnerability reporting policy.\n\n---\n\n## What's New in v1.3.2\n\n### UI/UX \u0026 Extension Refinements (v1.3.2)\n\n- **Collapsible Sidebar:** Left sidebar with Facts and Chat tabs is now collapsible for a better viewing experience.\n- **Graph Settings:** Added granular controls for dashboard graph parameters (node size, position, tension).\n- **Performance Fixes:** Fixed staggered graph rendering causing lag in large knowledge graphs.\n- **Extension Controls:** Added the ability to save the same chat multiple times, explicit 'Unload' session buttons, and an instant badge toggle for SYNQ.\n\n### Zero-Loss RAG Pipeline\n\nThe v1.0 Groq-based topic splitter was **lossy** — it silently discarded personal facts and rejected short messages. v1.2 replaced it entirely:\n\n| | Groq Topic Splitter (v1.0) | Sliding Window Chunker (v1.2+) |\n|:---|:---|:---|\n| Personal facts (\"my dog is Noob\") | ❌ Deleted as \"filler\" | ✅ Preserved verbatim |\n| Short messages | ❌ Rejected | ✅ Always included |\n| API call on save | ❌ Yes (1–3s, costs quota) | ✅ None (pure function) |\n| Information loss | ❌ Significant | ✅ **Zero** |\n\n### Auto-Connect\n\nNo more manual Connect button. Open a supported AI platform with an active session and the interceptor **auto-attaches**. Just type — SYNQ handles the rest.\n\n### Knowledge Graph Expansion\n\nEntity types grew from 12 → 22, now capturing the full picture:\n\n`Project · Technology · Feature · Bug · Decision · Concept · Library · API · Database · Framework · Auth · Architecture · Person · Pet · Goal · Problem · Preference · Habit · Location · Organization · Tool · Pattern`\n\n### Graph Visualization Overhaul\n\n- Degree-scaled nodes (8–60px radius) — hubs are visually dominant\n- Curved quadratic bezier edges with hover-reveal labels\n- Per-type colored glow filters and 3D radial gradients\n- Hover tooltip with name, type, and connection count\n- Zoom controls (+/−/reset)\n\n\u003e See [CHANGELOG.md](CHANGELOG.md) for the full history.\n\n---\n\n## Self-Hosting\n\nAll data lives in local Docker volumes. For custom passwords, port changes, backups, data reset, and reverse proxy configuration:\n\n**[Self-Hosting Guide →](SELF_HOSTING.md)**\n\n---\n\n## Contributing\n\nContributions are welcome — bug fixes, new platform support, UI improvements, documentation, and test coverage.\n\n**[Contributing Guide →](CONTRIBUTING.md)** — fork/clone/branch workflow, commit format, and step-by-step guide for adding a new AI platform.\n\n**[Code of Conduct →](CODE_OF_CONDUCT.md)**\n\n**Good first issues** are tagged [`good first issue`](https://github.com/Eshaan-Nair/Synq/issues?q=is%3Aissue+label%3A%22good+first+issue%22) in the issue tracker.\n\n---\n\n## Documentation\n\n| Document | Description |\n|:---|:---|\n| [ARCHITECTURE.md](ARCHITECTURE.md) | Full architecture, data flow, security model, data models |\n| [RAG_PIPELINE.md](RAG_PIPELINE.md) | Pipeline details, similarity scoring, tuning parameters |\n| [PLATFORM_SELECTORS.md](PLATFORM_SELECTORS.md) | Per-platform CSS selectors and staleness tracking |\n| [SELF_HOSTING.md](SELF_HOSTING.md) | Ports, passwords, backups, reverse proxy setup |\n| [CONTRIBUTING.md](CONTRIBUTING.md) | Fork workflow, commit format, adding new platforms |\n| [CHANGELOG.md](CHANGELOG.md) | Full version history |\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\u003cbr/\u003e\n\n**Stop re-explaining yourself.**\n**Give your AI the memory it should have had from day one.**\n\n\u003cbr/\u003e\n\n*Built by [Eshaan Nair](https://github.com/Eshaan-Nair) — a developer, for developers.*\n\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feshaan-nair%2Fsynq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feshaan-nair%2Fsynq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feshaan-nair%2Fsynq/lists"}