{"id":50309144,"url":"https://github.com/lucamazzza/proxy","last_synced_at":"2026-05-28T19:04:06.663Z","repository":{"id":354248034,"uuid":"1160337145","full_name":"lucamazzza/proxy","owner":"lucamazzza","description":"Client-Server middleware for distributed architectures using Appwrite as proxy","archived":false,"fork":false,"pushed_at":"2026-05-06T09:07:07.000Z","size":8100,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-06T11:10:38.202Z","etag":null,"topics":["appwrite","appwrite-database","baas","backend-as-a-service","client-server","cpp","middleware","proxy","qt"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucamazzza.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-02-17T20:26:36.000Z","updated_at":"2026-05-06T09:05:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lucamazzza/proxy","commit_stats":null,"previous_names":["lucamazzza/proxy"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lucamazzza/proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucamazzza%2Fproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucamazzza%2Fproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucamazzza%2Fproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucamazzza%2Fproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucamazzza","download_url":"https://codeload.github.com/lucamazzza/proxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucamazzza%2Fproxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33622070,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["appwrite","appwrite-database","baas","backend-as-a-service","client-server","cpp","middleware","proxy","qt"],"created_at":"2026-05-28T19:04:05.383Z","updated_at":"2026-05-28T19:04:06.654Z","avatar_url":"https://github.com/lucamazzza.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align='center'\u003e\n\n\u003cimg src=\"https://capsule-render.vercel.app/api?type=venom\u0026color=009130\u0026height=200\u0026section=header\u0026text=Proxy\u0026fontSize=90\u0026fontColor=ffffff\u0026animation=fadeIn\u0026fontAlignY=35\u0026desc=A%20Proxy%20based%20on%20Appwrite\u0026descAlignY=61\u0026descAlign=50\"/\u003e\n\n\u003c/p\u003e\n\n`proxy` is a Qt/C++ project centered on **appcomm**, a communication layer that lets clients exchange messages through Appwrite when direct network connectivity is restricted.\n\n## What is appcomm\n\n`appcomm` is the shared library in `appcomm/` used by both frontend and backend.  \nIts purpose is to provide a clean, Qt-native abstraction over Appwrite REST + Realtime for:\n\n- authentication (guest and email session flows)\n- topic/membership-based messaging\n- real-time message delivery\n- message querying, recovery, and basic delivery protections (rate limiting / state handling)\n\nIt is designed so UI or service code can consume high-level signals and methods instead of dealing with raw Appwrite request/event plumbing.\n\n## How does it work\n\nClients authenticate against Appwrite and resolve their membership/topic context. Messages are stored as Appwrite documents, while realtime subscriptions notify connected clients of new events.  \nWhen events are received, appcomm extracts payloads, maps them to internal models, and emits Qt signals for application code. Recovery/query components are used to backfill missed data and keep message flow coherent after reconnects or transient issues.\n\nOn the server side, the backend app uses appcomm + bootstrap helpers to configure or reuse the Appwrite database/collections and expose operational commands for users, topics, sessions, members, and messages.\n\n## How do i use it\n\n### Build\n\nRequirements: Qt 6 (Core, Network, WebSockets, Quick, QuickControls2, Qml), CMake \u003e= 3.16, C++17 compiler.\n\n```bash\ngit clone https://github.com/lucamazzza/proxy.git\ncd proxy\ncmake -B build -S . -DBUILD_TESTING=ON\ncmake --build build --parallel\n```\n\n### Configure backend and run it\n\nBackend writes config to `~/.proxy-backend-config.json` (or `PROXY_BACKEND_CONFIG_PATH` if set).\n\n```bash\n./build/backend/backend configure \\\n  https://\u003cyour-appwrite-endpoint\u003e/v1 \\\n  \u003cprojectId\u003e \\\n  \u003capiKey\u003e \\\n  \u003cdatabaseId\u003e \\\n  messages members topics sessions pendingmessages \\\n  --guest-access false\n```\n\n```bash\n./build/backend/backend start\n```\n\n### Run the frontend demo\n\nCreate the frontend config on the machine that runs the frontend.  \nYou can set `PROXY_FRONTEND_CONFIG_PATH` to choose a different file, which is useful when running multiple frontend instances against different Appwrite projects.\n\n```bash\n./build/frontend/appfrontend configure \\\n  https://\u003cyour-appwrite-endpoint\u003e/v1 \\\n  \u003cprojectId\u003e \\\n  \u003cdatabaseId\u003e \\\n  messages members pendingmessages\n```\n\nBy default this writes `~/.proxy-frontend-config.json`.\n\n```json\n{\n  \"endpoint\": \"https://fra.cloud.appwrite.io/v1\",\n  \"projectId\": \"\u003cprojectId\u003e\",\n  \"databaseId\": \"\u003cdatabaseId\u003e\",\n  \"messagesCollectionId\": \"messages\",\n  \"membersCollectionId\": \"members\",\n  \"incomingMessagesCollectionId\": \"pendingmessages\"\n}\n```\n\nThen run:\n\n```bash\n./build/frontend/appfrontend\n```\n\n### Run tests\n\n```bash\nctest --test-dir build/test --output-on-failure\n```\n\n`tst_appwritesdk` needs `APPWRITE_ENDPOINT`, `APPWRITE_PROJECT_ID`, and `APPWRITE_API_KEY`; if missing, that integration suite is skipped.\n\n## What if something does not work\n\n- **Build errors (Qt not found):** provide `-DCMAKE_PREFIX_PATH=/path/to/Qt/...` when configuring CMake.\n- **Backend config issues:** verify `~/.proxy-backend-config.json` exists and has valid values, or set `PROXY_BACKEND_CONFIG_PATH`.\n- **Auth/permission failures:** check Appwrite project ID, API key scopes, and collection/document permissions.\n- **No realtime messages:** verify WebSocket connectivity and that topic/membership documents are correctly set for the user.\n- **Frontend cannot connect:** verify `~/.proxy-frontend-config.json` exists and points to the intended endpoint/project/database/collection IDs, or set `PROXY_FRONTEND_CONFIG_PATH`.\n\n## Credits\n\nDeveloped as a SUPSI project by Luca Mazza and Manuela Mondini.\n\n## License\n\nCopyright (c) 2026 Luca Mazza, Manuela Mondini\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucamazzza%2Fproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucamazzza%2Fproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucamazzza%2Fproxy/lists"}