{"id":39589282,"url":"https://github.com/merylldindin/helix","last_synced_at":"2026-01-18T07:41:25.990Z","repository":{"id":112306017,"uuid":"592761045","full_name":"merylldindin/helix","owner":"merylldindin","description":"Nuxt SSG Template","archived":false,"fork":false,"pushed_at":"2026-01-10T21:32:29.000Z","size":13895,"stargazers_count":13,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-11T03:49:36.430Z","etag":null,"topics":["lottie","nuxt3","portfolio","swiper-js","typescript","vue3","vuetify3","website"],"latest_commit_sha":null,"homepage":"https://merylldindin.com","language":"Vue","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/merylldindin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-24T13:33:04.000Z","updated_at":"2026-01-05T15:35:14.000Z","dependencies_parsed_at":"2023-05-31T21:46:28.001Z","dependency_job_id":"2f583922-a9fb-420a-b441-db0abf658564","html_url":"https://github.com/merylldindin/helix","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/merylldindin/helix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merylldindin%2Fhelix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merylldindin%2Fhelix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merylldindin%2Fhelix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merylldindin%2Fhelix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/merylldindin","download_url":"https://codeload.github.com/merylldindin/helix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merylldindin%2Fhelix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28533172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"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":["lottie","nuxt3","portfolio","swiper-js","typescript","vue3","vuetify3","website"],"created_at":"2026-01-18T07:41:25.902Z","updated_at":"2026-01-18T07:41:25.983Z","avatar_url":"https://github.com/merylldindin.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://merylldindin.com\"\u003e\n  \u003cimg src=\"https://cdn.merylldindin.com/github/helix.webp\" alt=\"helix\" width=\"100%\"\u003e\n\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/merylldindin/helix/graphs/contributors\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/contributors/merylldindin/helix.svg?style=for-the-badge\" alt=\"contributors\"/\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/merylldindin/helix/stargazers\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/merylldindin/helix.svg?style=for-the-badge\" alt=\"stars\"/\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/merylldindin/helix/issues\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues/merylldindin/helix.svg?style=for-the-badge\" alt=\"issues\"/\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/merylldindin/helix/blob/main/LICENSE.txt\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/merylldindin/helix.svg?style=for-the-badge\" alt=\"license\"/\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ch2\u003e Nuxt SSG Template \u003c/h2\u003e\n    \u003ca href=\"https://merylldindin.com\"\u003e\n        View Demo\n    \u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/merylldindin/helix/issues\"\u003e\n        Report Bug\n    \u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## \u003csummary\u003eTable of Contents\u003c/summary\u003e\n\n\u003col\u003e\n    \u003cli\u003e\u003ca href=\"#about-helix\"\u003eAbout Helix\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#get-started\"\u003eGet Started\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#ide-recommendations\"\u003eIDE Recommendations\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#code-quality\"\u003eCode quality\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#git-conventions\"\u003eGit Conventions\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\n## About Helix\n\nHelix, from my set of `BioForge` initiatives, is a project born out of my frustration with LinkTree's limitations. Helix is a visually appealing and customizable way to showcase your journey, projects, and objectives all in one place.\n\n## Built With\n\n- [NuxtJS](https://nuxtjs.org/)\n- [Vuetify](https://vuetifyjs.com/en/)\n- [TypeScript](https://www.typescriptlang.org/)\n- [SwiperJS](https://swiperjs.com/)\n- [LottieJS](https://airbnb.io/lottie/#/)\n\n## Get Started\n\n```bash\n# install dev experience\nmake setup\n# install dependencies\nmake install\n# launch Nuxt instance\nmake start\n```\n\n## IDE Recommendations\n\nI recommend working with VSCode, an IDE that does not need to be presented. Internally, I use a set of code extensions enabling a minimum of code standardization, making the life of many developers more enjoyable. Those extensions are given in `.vscode/extensions.json`, and can be downloaded directly via the VSCode extension store. This goes hand and hand with properly configured VSCode workspace settings, available in `.vscode/settings.json`.\n\n## Code Quality\n\n### Husky:\n\nMany of our internal toolings are enforced via [husky](https://typicode.github.io/husky/#/), a wrapper for Git hooks. I currently enforce two hooks:\n\n- `commit-msg` relying on [commitlint](https://commitlint.js.org/) to make sure that our commit conventions are respected\n- `pre-commit` relying on [lint-staged](https://github.com/lint-staged/lint-staged) to run linters on staged files before committing\n\nMake sure those hooks are correctly configured via\n\n```bash\nyarn setup\n```\n\n### Prettier:\n\nTo maintain some minimal standards within our codebase, I rely on [prettier](https://prettier.io/) that is configured through `.prettierrc`. I use `.prettierignore` to avoid conflicts with some configuration files that would otherwise be broken by using prettier. Make sure prettier is correctly used in VSCode by installing the [VSCode extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode).\n\n### Helpers:\n\nI use [nvm](https://github.com/nvm-sh/nvm) for Node version management (see `.nvmrc`), [yarn](https://yarnpkg.com/) for package management, and [uv](https://docs.astral.sh/uv/) for Python dependency management (see `.python-version`). Alongside that environment, I use the following tools to maintain high code standards:\n\n- [prettier](https://prettier.io/) configured in `.prettierrc`\n- [eslint](https://eslint.org/) configured in `eslint.config.mjs`\n- [stylelint](https://stylelint.io/) configured in `stylelint.config.js`\n- [lint-staged](https://github.com/lint-staged/lint-staged) configured in `.lintstagedrc.mjs`\n- [typescript](https://typescript.nuxtjs.org/) configured in `tsconfig.json`\n\n### Naming Conventions:\n\n\"There are only two hard things in Computer Science: cache invalidation and naming things.\" - Phil Karlton\n\nThat is exactly why it is important everyone follow guidelines regarding naming conventions, especially when moving quickly as a team. Here are a set of rules that will most likely guide you through any problem you would face:\n\n1. Do not use abbreviations\n2. Use at least 2 words for function names\n3. Boolean variables should be infered from their name (e.g. start with `is_` or `has_`)\n\n\u003cb\u003eTypescript\u003c/b\u003e\n\n1. Use `PascalCase` for component registration and name\n2. Use `PascalCase` for component folders\n3. Use `camelCase` for pure JS/TS files and functions\n4. Use `SCREAMING_SNAKE_CASE` for constants\n5. Use [BEM](http://getbem.com/introduction/) conventions for SCSS\n6. Use 2 to 3 words for component naming\n7. Name your colors using [this](https://chir.ag/projects/name-that-color) project\n\n\u003cb\u003eConfigure Vuetify for BEM\u003c/b\u003e\n\nI use [Vuetify](https://vuetifyjs.com/en/) as our material design framework. It provides us with a set of components and themes. It is core to our frontend endeavors, and requires a bit of configuration. Vuetify relies on composition function on top of our configuration to provide helpers available throughout the codebase, and colors are a part of it. To abide by our conventions, I need to configure Vuetify to use BEM for its classes via `src/plugins/vuetify.client`.\n\nThat way, you will now be able to use `var(--v-theme-steel-gray)` or `text-steel-gray` in your codebase. I also expose the `enum` of our colors through our `@/types` for conveniency.\n\n### Typing:\n\nTyping is key to maintainability. It will increase the readability of the code, but will also passively document your code. Finally, type checking will help to find some obvious bugs.\n\nTypeScript is fully integrated into our CI pipeline via GitHub Actions. In addition to that, you'll be warned by Nuxt about any type errors when developing locally. I expose the command `yarn types` to run the type checker manually.\n\nI aim to make our types as specific as possible. The use `any` is strongly discouraged in favor of `unknown`.\n\n## Git Conventions\n\n### Branches:\n\nI have a simple convention for branch naming: `{initials}/{descriptive-kebab-case}`. Keep them all lowercase. For John Doe working on a feature A, that would be `jd/feature-a`.\n\n### Commits:\n\nThe Conventional Commits specification is a lightweight convention on top of commit messages. It provides an easy set of rules for creating an explicit commit history; which makes it easier to write automated tools on top of. This convention dovetails with SemVer, by describing the features, fixes, and breaking changes made in commit messages. Learn more [here](https://www.conventionalcommits.org/en/v1.0.0/).\n\n### Pull requests:\n\nThere are simple rules in regards to our PR management:\n\n- Link your PRs to their related Notion tickets;\n- Use prefixes for your PR titles among [FIX], [FEAT], [REFACTOR], [RELEASE], [HOTFIX], [TEST];\n- If your code affects the application build, be sure to update the `README.md`;\n- Do not merge a PR until all comments are resolved;\n- Remove your branch after merging;\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerylldindin%2Fhelix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerylldindin%2Fhelix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerylldindin%2Fhelix/lists"}