{"id":21499367,"url":"https://github.com/alaingalvan/alainxyz-comments","last_synced_at":"2026-03-19T20:39:09.402Z","repository":{"id":80890311,"uuid":"230706406","full_name":"alaingalvan/alainxyz-comments","owner":"alaingalvan","description":"🔮 Utterances powered comments for the Alain.xyz blog.","archived":false,"fork":false,"pushed_at":"2020-03-08T22:09:44.000Z","size":3,"stargazers_count":2,"open_issues_count":19,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-02T09:43:26.115Z","etag":null,"topics":["alain","blog","comments","graphics","utterances"],"latest_commit_sha":null,"homepage":"https://alain.xyz/blog","language":null,"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/alaingalvan.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.md","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":"2019-12-29T05:17:56.000Z","updated_at":"2023-11-15T11:27:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"98f2b146-273b-4de4-b534-3bc73141f09f","html_url":"https://github.com/alaingalvan/alainxyz-comments","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alaingalvan/alainxyz-comments","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaingalvan%2Falainxyz-comments","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaingalvan%2Falainxyz-comments/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaingalvan%2Falainxyz-comments/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaingalvan%2Falainxyz-comments/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alaingalvan","download_url":"https://codeload.github.com/alaingalvan/alainxyz-comments/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaingalvan%2Falainxyz-comments/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29219274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T03:18:47.732Z","status":"ssl_error","status_checked_at":"2026-02-08T03:15:31.985Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["alain","blog","comments","graphics","utterances"],"created_at":"2024-11-23T17:15:44.002Z","updated_at":"2026-02-08T03:33:34.905Z","avatar_url":"https://github.com/alaingalvan.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"![Cover Art](https://alain.xyz/assets/brand/website-screenshot.jpg)\n\n# 🔮 Alain.xyz Blog Comments\n\n[![License][license-img]][license-url]\n\nAll comments on the [Alain.xyz](https://alain.xyz/blog) are powered by [Uterances](https://utteranc.es/), a tool that uses Github issues as threads for blog post comments.\n\n## How it Works\n\nThe site is comprised of 3 primary modules:\n\n```bash\n├─ daemon/    # Server Daemon\n├─ backend/   # Express HTTP Server\n├─ frontend/  # React Frontend Application\n└─ portfolio/ # Personal Portfolio\n```\n\n### Backend\n\nThe **Backend** is a basic Express HTTP server, with the added functionality of being able to prerender React components to help reduce the time to interaction.\n\n- [Node](https://nodejs.org/en/) - JavaScript based web server.\n\n- [Express](https://expressjs.com/) - Middleware based web server framework.\n\n- [MongoDB](https://mongodb.org/) - Basic non-relational database.\n\n### Frontend\n\nThe **Frontend** is a React/Redux/Webpack application with that takes lots of artistic license.\n\n- [React](https://facebook.github.io/react/) - Front-end framework view framework.\n\n- [Redux](http://http://redux.js.org) - Unified Application State system.\n\n### Daemon\n\nThe **Daemon** is responsible for keeping the server in sync with this Github repo (so **Continuous Integration**), and uses [Github's Repository Webhooks](https://developer.github.com/v3/repos/hooks/) to do so. Alternatives such as using a git remote are also possible, but this has the added benefit of supporting pull requests from here 😁.\n\n- [Rust](https://rustlang.org) - easy to use systems language used for a continuous integration daemon.\n\n- [Iron](http://ironframework.io/) - An Express like extendable web framework for Rust.\n\n### Build\n\n- [TypeScript](http://www.typescriptlang.org/) - Typed JavaScript.\n\n- [Lerna](https://lernajs.io/) - Tool for managing multiple projects in one repo.\n\n- [Webpack](https://webpack.js.org) - Compilation tool for JavaScript.\n\n- [SystemJS](https://github.com/systemjs/systemjs) - an `import()` polyfill.\n\n- [PostCSS](https://github.com/postcss/postcss) - CSS with postprocessing functions applied to its AST.\n\n---\n\nCheck out the [blog post where I detail design decisions here](https://alain.xyz/blog/the-making-of-alain-xyz).\n\nA few of the projects that influenced the design of this app were:\n\n- [Wordpress Calypso](https://github.com/Automattic/wp-calypso)\n\n- [TypeScript Samples](https://github.com/Microsoft/TypeScriptSamples/tree/master/imageboard)\n\n- [ReactJS Essentials by Artemij Fedosejev](https://github.com/fedosejev/react-essentials)\n\n- [GatsbyJS](https://www.gatsbyjs.org/)\n\n## License\n\n*All source code* is available with an **MIT license**, feel free to take bits and pieces and use them in your own projects. I would love to hear how you found things useful, feel free to contact me on Twitter [@alainxyz](https://twitter.com/alainxyz).\n\n*All written articles and art* such as blog posts and artwork, etc. are **Copyright Alain Galvan, All Rights Reserved** unless stated otherwise. If you would like to feature them in a research paper however, feel free to use the following bibtex:\n\n```tex\n% If you're using a different blog post, replace the title, month, and year appropriately.\n@misc{galvan2020,\n  title={A Comparison of Modern Graphics APIs},\n  url={https://www.alain.xyz/blog/comparison-of-modern-graphics-apis},\n  journal={Alain.xyz},\n  author={Alain Galvan},\n  year={2020}\n}\n```\n\n[license-img]: https://img.shields.io/:license-mit-blue.svg?style=flat-square\n[license-url]: https://opensource.org/licenses/MIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falaingalvan%2Falainxyz-comments","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falaingalvan%2Falainxyz-comments","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falaingalvan%2Falainxyz-comments/lists"}