cuHacking logocuHacking DevDocs

Quick Start

Explore the suite of software we use.

Written in a beginner-friendly language in order to provide a smooth onboarding experience for cuHacking's 2024-25 development team, and also act as a general open-source reference for other projects.

๐Ÿ”ญ Project Management

๐Ÿช„ UI/UX Design

๐Ÿž Development

โœจ Front-End

TypeScript Logo

TypeScript

  • Javascript on steroids.
  • Catches your silly bugs before you can even run the code.
  • React Logo

    React

  • A JavaScript view layer library for building user interfaces.
  • Emphasis on the library part, it's not a framework.
  • Very bueno for saving you from writing all the HTML yourself, and adding small bits of interactivity.
  • Not so bueno for heavyweight interactivity, need bigger guns and external libraries for that.
  • Next.js Logo

    Next.js (may be replaced with Remix)

  • An unopinionated and batteries-not-included React framework with routing, server-side rendering, image optimizations, and many other things.
  • In a nutshell, pulls all kinds of strings that allow you to use React without setting the user's computer on fire.
  • Maintained by Vercel.
  • Remix Logo

    Remix

  • More performant than Next.js for dynamic applications.
  • More 'guts-out' and modular with a clearer separation between client and server.
  • Maintained by Shopify & the React Router team.
  • Storybook Logo

    Storybook

  • A framework for developing and testing UI components in isolation.
  • Allows you to make your buttons in peace, without having to launch the entire main app to see it.
  • Also doubles as documentation for our design system and a playground for anything and everything the user sees in the main app, in any state; saving you valuable clickity clicks.
  • TailwindCSS Logo

    TailwindCSS

  • A utility-first CSS framework to style components super fast.
  • No more separate stylesheets. Won't necessarily fix your potato UI but will allow you to make them faster and with less debugging.
  • Does not scale well and makes codebases unreadable by mixing styling and business logic. This is addressed by good React component architecture in tandem with other libraries.
  • Radix UI Primitives Logo

    Radix UI Primitives

  • Unstyled headless components that we can easily lay our design system on top of.
  • Also handles accessibility, saving us from writing and maintaining a lot of code + tests.
  • Shadcn/ui Logo

    Shadcn/ui

  • A modern component library built on top of Radix UI Primitives and styled with Tailwind, combining accessibility, customizability, and business logic into one.
  • Has an entire ecosystem of other libraries and heavily supported by the community, making it easy for us to find any component we need.
  • Also has maintained Figma files and Storybooks, allowing us to tightly integrate design mockups with the frontend.
  • Not an npm package, and therefore easily modifiable because we have direct access to code. Even comes with tools so that we can track how much we changed the original look.
  • โ‰๏ธ State Management

    โš™๏ธ Back-End & Middleware

    ๐Ÿงน Code Quality

    ESLint Logo

    ESLint

  • Find and fix problems in code, and enforce style guide and best practices.
  • Saves you from having to memorize and study our style guide by giving you instant feedback while coding.
  • Saves us from having to make our entire style guide and re-invent best practices from scratch using plugins.
  • Can catch lightweight surface bugs. Cannot catch deep business logic bugs, but prevents the likelihood of them happening by catching the surface bugs.
  • Prettier Logo

    Prettier

  • An opinionated code formatter to make code look Prettier.
  • Cannot catch bugs. Only handles fixing inconsistencies in spacing, quotes, semicolons, parentheses, brackets, etc.
  • Conventional Commits Logo

    Conventional Commits

  • Standardized open-source specification for commit messages.
  • Commitizen Logo

    Commitizen

  • A tool to create standardized commit messages that adhere to the conventional commits specification + our sprinkles on top.
  • Commitlint Logo

    Commitlint

  • Lint commit messages according to our specifications.
  • Commitlint/config-conventional- Plugin that enforces conventional commits for commit messages and allows us to modify them.
  • Commitlint/cz-commitlint- Provides an integration for Commitizen so that the only options displayed to you are the same ones defined in Commitlint.
  • In a nutshell, blocks commit messages that do not meet our specs, which in turn saves our CI pipelines from crashing or creating the wrong versions, which in turn ensures our whole app doesn't blow up.
  • Lint-staged Logo

    Lint-staged

  • Runs ESLint and Prettier on Git staged files so that there are no code style diffs at the PR level.
  • Husky Logo

    Husky

  • Library that allows us to quickly and easily trigger Git hooks, which in turn trigger commands to run the tools mentioned above.
  • โš—๏ธ Testing

    โ˜๏ธ Deployment

    Semantic Release Logo

    Semantic Release (being replaced by Nx Release)

  • Automated versioning and package publishing as per the Semantic Versioning specification.
  • Parses the history of commit messages to automatically generate changelogs.
  • Requires conventional commit specs to be followed in order to work properly.
  • GitHub Actions Logo

    GitHub Actions

  • Automated CI/CD pipelines to run linting, test suites, and handle versioning.
  • The final boss you need to defeat before human eyes even see your code.
  • Very fun to configure and watch at work. Not very fun to debug โ˜๏ธ
  • Docker Logo

    Docker

  • Containerization platform to develop, ship, and run the app anywhere.
  • Your computer is a box. Someone else's computer is a box. Your box is different from their box. The thing works on their box but not yours. What if both of you used the same box with the same configs and could easily pass it around like hot potato? ๐Ÿ“ฆ๐Ÿค”
  • Docker is that box, more fancily referred to as a 'container'. Both of you run this box inside your box. It works for both of you by boxception.
  • Netlify Logo

    Netlify

  • For safely deploying our app to the web so that people can see and use it from their browsers.
  • Uses AWS under the hood.
  • Integrates well with Next.js and also allows for demo deployments for our own purposes which are not indexed on google.
  • If we push a version that makes it past all our tests but somehow breaks at the build stage, Netlify will provide instant feedback and not deploy it, leaving up the previous functional version.
  • Also allows quick and easy rollbacks to previously deployed versions.
  • Last updated on

    On this page

    Edit on GitHubMade with ๐Ÿฉถ for Hackers by Hackers