{"id":20407526,"url":"https://github.com/cppshane/blogly","last_synced_at":"2026-06-10T14:31:26.532Z","repository":{"id":116679090,"uuid":"492402327","full_name":"cppshane/blogly","owner":"cppshane","description":"This is my personal little CLI for performing tasks related to my custom blog.","archived":false,"fork":false,"pushed_at":"2025-07-09T04:50:28.000Z","size":104,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-09T05:34:55.908Z","etag":null,"topics":[],"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/cppshane.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}},"created_at":"2022-05-15T06:07:34.000Z","updated_at":"2025-07-09T04:50:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"24aa75d6-2217-4a12-987d-375e07d687f7","html_url":"https://github.com/cppshane/blogly","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cppshane/blogly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cppshane%2Fblogly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cppshane%2Fblogly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cppshane%2Fblogly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cppshane%2Fblogly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cppshane","download_url":"https://codeload.github.com/cppshane/blogly/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cppshane%2Fblogly/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34157453,"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-06-10T02:00:07.152Z","response_time":89,"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":[],"created_at":"2024-11-15T05:24:38.164Z","updated_at":"2026-06-10T14:31:26.525Z","avatar_url":"https://github.com/cppshane.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blogly\n\nWrite blog post in HTML, output to Markdown and publish to main site + 3rd party sites\n\n## Blog Flow\n\n1. Start [personal site](https://github.com/cppshane/shaneduffy) \u003e (on personal site project directory) `docker compose up`\n2. Ensure it shows up properly at `localhost:4200`\n3. Import posts from server if necessary \u003e `sudo bash blogly-import.sh`\n4. Create new post \u003e `dotnet run -- new`\n5. Write post in workspace document created\n6. Migrate to server \u003e `sudo bash blogly-migrate.sh`\n7. Crosspost to sites \u003e `sudo bash crosspost.sh \u003cpostId\u003e`\n8. Verify posts on crosspost sites (Finish Medium publication, manually add image captions, review for typos, etc.)\n9. Regenerate routes.txt/sitemap \u003e (on server) `bash blogly-generate.sh`\n10. Pre-render \u003e (on server) `bash deploy-shaneduffy.sh`\n11. Backup to G-Drive \u003e (on server) `bash backup-mongo.sh`\n\n## Commands\n\n### - listen subId workspaceDir\nListen for changes to a specific file within the workspace\n```\ndotnet run -- listen 3 ~/Workspace\n```\n\n### - new\nCreates new post in local dev db and creates file in workspace, opens the file in VSCode and then begins listening for changes to file.\n```\ndotnet run -- new\n```\n\n### - migrate connectionString1 connectionString2\nAdds all non-existing posts from one database to another.\n```\ndotnet run -- migrate \"mongodb://shane:password@127.0.0.1:27017/shaneduffy_database?authSource=shaneduffy_database\" \"mongodb://shane:password@143.198.140.108:27017/shaneduffy_database?authSource=shaneduffy_database\"\n```\n\n### - crosspost platform(medium, dev, hashnode) subId workspaceDir\nMigrates the post with the given subId to the specified platform.\n```\ndotnet run -- crosspost medium 13 /home/shane/workspace\n```\n\n## Notes\ntype - blog, notes\n\npostUri - does not contain file extension\n\n### Styles/Elements\n`h1`, `h2`, `h3`, `h4`, `p`, `strong`\n\nInline Code - `\u003cspan class=\"text-code\"\u003e...\u003c/span\u003e`\n\nFull Code - `\u003cpre\u003e\u003ccode\u003e...\u003c/pre\u003e\u003c/code\u003e`\n\nText Link - `\u003ca class=\"text-link\"\u003e....\u003c/a\u003e`\n\nItalic - `\u003cspan class=\"text-italic\" target=\"_blank\"\u003e...\u003c/span\u003e`\n\nUnordered List - `\u003cul\u003e\u003cli\u003e...\u003c/li\u003e\u003cli\u003e...\u003c/li\u003e\u003c/ul\u003e`\n\nImage - `\u003cimg src=\"...\" alt=\"...\"\u003e`\n\n### Code Highlighting\nThe value in `codelang` attribute will be forwarded to the Markdown translation.\n```\n\u003cpre\u003e\u003ccode codelang=\"cs\"\u003e\u003c/code\u003e\u003c/pre\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcppshane%2Fblogly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcppshane%2Fblogly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcppshane%2Fblogly/lists"}