New Project Checklist

Written — Updated
  • A lot of this applies mostly to library projects that are more likely to draw outside contributions.
  • General Tasks

    • Set up a justfile to run common tasks
      • _default:
          @just --list
        
  • JS Projects

    • husky to install Git hooks
    • For public projects, set up Github PR template with a note to add a changeset.
    • lint-staged to help with running prettier on commit
    • changesets for changelog generation
      • Add @changesets/changelog-github for including Github PR info in changelogs
      • Add these package.json scripts
        • "changeset": "changeset",
          "generate-changelog": "source ghtoken; GITHUB_TOKEN=${GITHUB_TOKEN} changeset version",
          
      • Install changeset-bot.
    • ESLint

      • Disable some annoying rules which are enabled by common config packs
      • rules: {
            'prefer-const': 'off',
            '@typescript-eslint/explicit-module-boundary-types': 'off',
            '@typescript-eslint/ban-ts-comment': 'off',
            '@typescript-eslint/ban-types': 'off',
            '@typescript-eslint/no-empty-function': 'off',
            '@typescript-eslint/no-non-null-assertion': 'off',
            '@typescript-eslint/no-unused-vars': 'warn',
         }
        
    • Prettier

      • Install prettier-plugin-tailwindcss
      • {
          "useTabs": false,
          "singleQuote": true,
          "trailingComma": "es5",
          "printWidth": 100,
          "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
          "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
        }
        
      • For now, update package.json format and lint scripts to workaround a bug in Prettier 3.0. (Note: this seems to be fixed, but need to confirm)
        •     "lint": "prettier --ignore-unknown --check './**/*' && eslint .",
              "format": "prettier --ignore-unknown --write './**/*'"
          
  • Rust Projects

    • Set up rustfmt.toml the way I like it
      • edition = "2021"
        imports_granularity = "Crate"
        group_imports = "StdExternalCrate"
        

Thanks for reading! If you have any questions or comments, please send me a note on Twitter.