{"id":15663653,"url":"https://github.com/xiongemi/treehole-angular-firebase","last_synced_at":"2025-09-14T20:36:37.496Z","repository":{"id":37447551,"uuid":"271885535","full_name":"xiongemi/treehole-angular-firebase","owner":"xiongemi","description":"Anonymous Discussion Forum creating using Angular and Firebase","archived":false,"fork":false,"pushed_at":"2023-03-07T13:31:29.000Z","size":12456,"stargazers_count":18,"open_issues_count":16,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-06T19:04:55.968Z","etag":null,"topics":["angular","angularfire","backend","firebase","firestore","frontend"],"latest_commit_sha":null,"homepage":"https://xiongemi.github.io/treehole-angular-firebase","language":"TypeScript","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/xiongemi.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}},"created_at":"2020-06-12T20:34:26.000Z","updated_at":"2024-08-28T11:55:13.000Z","dependencies_parsed_at":"2024-10-23T08:38:19.884Z","dependency_job_id":"f1904818-aa47-4180-820f-9f5484f6025e","html_url":"https://github.com/xiongemi/treehole-angular-firebase","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/xiongemi/treehole-angular-firebase","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiongemi%2Ftreehole-angular-firebase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiongemi%2Ftreehole-angular-firebase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiongemi%2Ftreehole-angular-firebase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiongemi%2Ftreehole-angular-firebase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xiongemi","download_url":"https://codeload.github.com/xiongemi/treehole-angular-firebase/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiongemi%2Ftreehole-angular-firebase/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275163209,"owners_count":25416369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"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":["angular","angularfire","backend","firebase","firestore","frontend"],"created_at":"2024-10-03T13:39:13.210Z","updated_at":"2025-09-14T20:36:37.431Z","avatar_url":"https://github.com/xiongemi.png","language":"TypeScript","readme":"# Treehole Angular Firebase\n\nA discussion forum using Angular as frontend and Firebase as backend:\n\n![sreenshot](https://github.com/xiongemi/treehole-angular-firebase/blob/master/src/assets/images/screenshot.png?raw=true)\n\nThis project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.9.\n\n## Tech Stack\n\n- Frontend: Angular\n- Component Library: ng-zorro-antd (Ant Design of Angular)\n- Backend: Firebase, integrate using AngularFire\n- Frontend Session: uuid\n- Internalization: @ngx-translate\n- State Management: NGXS\n- CSS library: tachyons\n\n## Add Your Own Firebase Config\n\nCreate a file named `firebase.config.ts` under `src` folder.\nAdd your own firebase config in this file, in below format\n\n```\nexport const firebaseConfig = {\n  apiKey: '\u003cyour-key\u003e',\n  authDomain: '\u003cyour-project-authdomain\u003e',\n  databaseURL: '\u003cyour-database-URL\u003e',\n  projectId: '\u003cyour-project-id\u003e',\n  storageBucket: '\u003cyour-storage-bucket\u003e',\n  messagingSenderId: '\u003cyour-messaging-sender-id\u003e'\n};\n```\n\n## Commands\n\n- run locally: `npm run start`\n- webpack-bundle-analyzer: `npm run build:stats` and `npm run analyze`\n- deploy to github: `npm run deploy:github`\n- run production build locally: `npm run build` and `http-server dist/treehole-angular-firebase/browser`\n- deploy to firebase hosting: `npm run deploy:firebase`\n- ssr build (not working right now): `npm run build:ssr` and `npm run serve:ssr`\n\n## Development server\n\nRun `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.\n\n## Code scaffolding\n\nRun `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.\n\n## Build\n\nRun `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.\n\n## Running unit tests\n\nRun `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).\n\n## Running end-to-end tests\n\nRun `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).\n\n## Further help\n\nTo get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).\n\n## Firestore Cloud Data Structure\n\n\u003clink href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n      rel=\"stylesheet\"\u003e\n\n### Firestore Collections\n\n- \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e posts\n  - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e post1\n    - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e likes\n    - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e dislikes\n    - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e comments\n\n### Firestore Posts Example\n\n- \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e posts\n  - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e post1\n    - id: \"Ebd1BwdaNqniLCsy0xOb\"\n    - uuid: \"e51d2784-b163-41af-9e66-0bbec811fc63\"\n    - title: \"post title\"\n    - message: \"This is a first line for a new Forum. \\nThis is a second line for a new Forum.\"\n    - language: \"en\"\n    - createdAt: \"2021-02-04T06:17:38.936Z\"\n    - likesCount: 3\n    - dislikesCount: 4\n    - commentsCount: 3\n    - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e likes\n      - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e like1\n        - id: \"L0svxEZDEiQEl2Djof1R\"\n        - uuid: \"0fbfd447-49f5-4e2c-bbc7-bc8afb8a62a2\"\n        - createdAt: \"2021-02-04T06:17:38.936Z\"\n      - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e like2\n        - ...\n    - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e dislikes\n      - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e dislike1\n        - id: \"niZDMC5yu9WBXW45p0Ny\"\n        - uuid: \"0fbfd447-49f5-4e2c-bbc7-bc8afb8a62a2\"\n        - createdAt: \"2021-02-04T06:17:38.936Z\"\n      - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e dislike2\n        - ...\n    - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e comments\n      - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e comment1\n        - id: \"AKAT7WHC8LApsS0y75h1\"\n        - uuid: \"ba449189-d76a-4799-b1ce-490b0e5d5909\"\n        - comment: \":) :) :) :) :) :):) :) :)\"\n        - parentDocId: \"Ebd1BwdaNqniLCsy0xOb\"\n        - createdAt: \"2021-02-10T23:57:41.454Z\"\n        - likesCount: 1\n        - dislikesCount: 1\n          - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e likes\n            - ...\n          - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003ecollections_bookmark\u003c/span\u003e dislikes\n            - ...\n      - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e comment2\n        - ...\n  - \u003cspan class=\"material-icons notranslate\" aria-hidden=\"true\" translate=\"no\"\u003eclass\u003c/span\u003e post2\n    - ...\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiongemi%2Ftreehole-angular-firebase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxiongemi%2Ftreehole-angular-firebase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiongemi%2Ftreehole-angular-firebase/lists"}