{"id":18764101,"url":"https://github.com/oddbit/tanam","last_synced_at":"2025-05-16T08:00:22.358Z","repository":{"id":31911476,"uuid":"130793092","full_name":"oddbit/tanam","owner":"oddbit","description":"Plug-n-play CMS for websites on Firebase","archived":false,"fork":false,"pushed_at":"2025-01-07T06:47:05.000Z","size":24125,"stargazers_count":180,"open_issues_count":12,"forks_count":39,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-05-07T19:01:57.139Z","etag":null,"topics":["angular","cms","dustjs","firebase","firebase-authentication","firebase-cloud-functions","firebase-firestore","firebase-hosting","firebase-storage","npm-module","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/tanam","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oddbit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/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}},"created_at":"2018-04-24T03:49:34.000Z","updated_at":"2025-03-16T15:26:33.000Z","dependencies_parsed_at":"2024-05-28T05:41:09.534Z","dependency_job_id":"9f69efe0-0b27-4ac0-bfab-a2883f4c6d18","html_url":"https://github.com/oddbit/tanam","commit_stats":{"total_commits":1238,"total_committers":9,"mean_commits":"137.55555555555554","dds":0.5048465266558966,"last_synced_commit":"a82a5ec1f4e677770cccdf3cb05ac483e4dfbf47"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddbit%2Ftanam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddbit%2Ftanam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddbit%2Ftanam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddbit%2Ftanam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oddbit","download_url":"https://codeload.github.com/oddbit/tanam/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254493382,"owners_count":22080126,"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","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","cms","dustjs","firebase","firebase-authentication","firebase-cloud-functions","firebase-firestore","firebase-hosting","firebase-storage","npm-module","typescript"],"created_at":"2024-11-07T18:28:42.726Z","updated_at":"2025-05-16T08:00:22.310Z","avatar_url":"https://github.com/oddbit.png","language":"TypeScript","readme":"# Tanam 🌱 Plug-n-play CMS for websites on Firebase\n\n![License](https://img.shields.io/npm/l/tanam.svg)\n![NPM version](https://img.shields.io/npm/v/tanam.svg)\n![Total NPM downloads](https://img.shields.io/npm/dt/tanam.svg)\n\nOur aim is to provide a self hosted publishing platform for Firebase.\n\nTanamCMS is the easiest way to build a website for dynamic content such as a blogging platform where you easily can publish and manage your content, even schedule posts to be published.\n\nTanam also has a built in AI ghostwriter that can help you generate articles in your own writing style. You provide the draft or voice transcript and the ghostwriter will make it into a well written article for you.\n\n# Set up\n\nYou will need to configure the Next app in the dot-env file `apps/cms/.env`. You can find an template file named `apps/cms/.env.local.example` to rename and populate with values.\n\n## Build and run locally\n\nInstall all dependencies and serve locally.\n\n```sh\nnpm install\nnpm run serve\n```\n\n## Deploy to Firebase\n\nFollow the [documentation for Firebase App Hosting](https://firebase.google.com/docs/app-hosting)\non how to set up your application for automatic deployment.\n\n### Configure Firebase cloud\n\nIn order to deploy to Firebase App Hosting you will need to set up some secrets on GCP Secrets Manager.\n\nFollow the steps below to configure it from command line.\n\nRead the environment variables from the CMS configuration\n\n```sh\nsource apps/cms/.env\nsource .env\n```\n\nCopy and paste all these to set up. Be patient, it will take a little while to complete all variable configuration.\n\n```sh\necho $NEXT_PUBLIC_FIREBASE_API_KEY | firebase apphosting:secrets:set --force --data-file - tanamApiKey\necho $NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN | firebase apphosting:secrets:set --force --data-file - tanamAuthDomain\necho $NEXT_PUBLIC_FIREBASE_DATABASE_URL | firebase apphosting:secrets:set --force --data-file - tanamDatabaseUrl\necho $NEXT_PUBLIC_FIREBASE_PROJECT_ID | firebase apphosting:secrets:set --force --data-file - tanamProjectId\necho $NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET | firebase apphosting:secrets:set --force --data-file - tanamStorageBucket\necho $NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID | firebase apphosting:secrets:set --force --data-file - tanamMessagingSenderId\necho $NEXT_PUBLIC_FIREBASE_APP_ID | firebase apphosting:secrets:set --force --data-file - tanamAppId\necho $NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID | firebase apphosting:secrets:set --force --data-file - tanamMeasurementId\necho $GEMINI_API_KEY | firebase apphosting:secrets:set --force --data-file - tanamGenAiApiKey\n```\n\nYou will need to grant access to your app-hosting backend if this is the first time you are setting the variables\nand if you didn't enable access to all variables in the `apphosting:secrets:set` step.\n\n```sh\nexport APP_HOSTING_BACKEND=\u003cyour app-hosting-backend\u003e\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamApiKey\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamAuthDomain\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamDatabaseUrl\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamProjectId\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamStorageBucket\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamMessagingSenderId\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamAppId\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamMeasurementId\nfirebase apphosting:secrets:grantaccess --backend $APP_HOSTING_BACKEND tanamGenAiApiKey\n```\n\n# License\n\n```\nCopyright oddbit\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foddbit%2Ftanam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foddbit%2Ftanam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foddbit%2Ftanam/lists"}