All Projects → Liinkiing → next-ts-starter

Liinkiing / next-ts-starter

Licence: other
A Next.JS powered Typescript starter with styled components, styled-system, framer motion, jest and cypress

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to next-ts-starter

next-ts-graphql-apollo-starter
An opiniated Next powered starter which include support for Apollo with GraphQL SSR support, codegen, styled component / system, framer motion and Cypress
Stars: ✭ 18 (-33.33%)
Mutual labels:  starter, next, cypress, styled-system, framer-motion
react-redux-nextjs-bootstrap-starter
next + react + redux + bootstrap starter
Stars: ✭ 24 (-11.11%)
Mutual labels:  starter, next
next-saas-starter
⚡️ Free Next.js responsive landing page template for SaaS products made using JAMStack architecture.
Stars: ✭ 497 (+1740.74%)
Mutual labels:  starter, next
klee
A personnal UI library made as an excuse to have a published UI package
Stars: ✭ 19 (-29.63%)
Mutual labels:  styled-system, framer-motion
firebase-spring-boot-rest-api-authentication
Firebase Spring Boot Rest API Authentication
Stars: ✭ 172 (+537.04%)
Mutual labels:  starter, cypress
vite-primevue-starter
VUE 3 Starter project for using primevue 3 with Vite 2 - Pages, Layouts, Validation
Stars: ✭ 37 (+37.04%)
Mutual labels:  starter, cypress
react-redux-nextjs-bootstrap-pwa-starter
a progressive web app starter with next js redux + redux-persist + bootstrap
Stars: ✭ 69 (+155.56%)
Mutual labels:  starter, next
dogstudio-next-starter
Opinionated Next.js starter by Dogstudio
Stars: ✭ 66 (+144.44%)
Mutual labels:  starter, next
React Three Next
React Three Fiber, Nextjs, Tailwind starter
Stars: ✭ 195 (+622.22%)
Mutual labels:  starter
Vite Vue3 Tailwind Starter
Vite 2.x + Vue 3.x + Tailwind 2.x (starter) ⚡
Stars: ✭ 205 (+659.26%)
Mutual labels:  starter
React Ssr Boilerplate
Boilerplate for React apps with routing, code splitting, & server side rendering
Stars: ✭ 183 (+577.78%)
Mutual labels:  starter
Angular Library Seed
🌾 Seed project for Angular libraries that are AOT/JIT compatible and that use external SCSS-styles and HTML-templates
Stars: ✭ 197 (+629.63%)
Mutual labels:  starter
Nestjs Email Authentication
Nestjs Starter using Mongodb and Passportjs
Stars: ✭ 222 (+722.22%)
Mutual labels:  starter
Zero To Preact
A Step-by-step Guide to Preact + Webpack 2, without boilerplate!
Stars: ✭ 185 (+585.19%)
Mutual labels:  starter
Angular11 App
Angular 11 ,Bootstrap 5, Node.js, Express.js, CRUD REST API, PWA, SSR, SEO, Angular Universal, Lazy Loading, PostgreSQL, MYSQL
Stars: ✭ 233 (+762.96%)
Mutual labels:  starter
React Hooks Mobx State Tree
React Hooks + MobX State Tree + TypeScript = 💛
Stars: ✭ 169 (+525.93%)
Mutual labels:  starter
Cordova Create React App
A tutorial on how to set up a Cordova project using Create React App.
Stars: ✭ 167 (+518.52%)
Mutual labels:  starter
Typescript Starter
Quickly create and configure a new library or Node.js project
Stars: ✭ 2,953 (+10837.04%)
Mutual labels:  starter
Gulp Pug Starter
Frontend development with pleasure. Pug + SCSS version
Stars: ✭ 228 (+744.44%)
Mutual labels:  starter
Vue Element Starter
Vue starter with Element-UI [READY, unmaintained now]
Stars: ✭ 216 (+700%)
Mutual labels:  starter

Next Starter

A starter to bootstrap your Next application (nice pun gg)

Usage

$ yarn
# install dependencies

$ yarn dev
# launch Next dev script

$ yarn build
# launch Next build script

$ yarn start
# launch Next start script

$ yarn test
# launch test suite

$ yarn cy:open
# open cypress (you first need to install deps in cypress folder)

$ yarn ts:check
# check TypeScript

$ yarn lint
# run ESLint

Next config

It comes already configured with some nice plugin. You can see in next.config.js what is used. In short, it allows support of importing images files and fonts within webpack. It also comes with NProgress support by default, so it shows a small loading bar in top of the page when loading. You can find the component in ~/components/NProgress.tsx, and it is used in the custom _app.tsx

Styled component

The template comes with styled-components. Again, you can either choose to not use it, this is a personal choice. You can also find a styles folder, which contains many related styled-components files to keep things organized. It's also includes all themes-related stuff in here. It's again a personal convention that I follow, feel free to annihilate this directory if you want 😢

Styled system

It also comes with styled-system. It is a great way to build reusable UI blocks with a great props API and consistent spaces / typography. A lot comes from the theme, provided in ~/styles/themes/base.ts where we define some breakpoints, spacings and typography stuff. It allows then the custom AppBox component (~/ui/AppBox) to be aware of your theme and then build something amazing with the primitives. By default, this starter provides some basic examples components that uses this pattern, for example the AppNav component (~/components/layout/AppNav).

🔥 It also supports and provides autocomplete for props that takes source from the theme (e.g bg, zIndex, border...). 🔥

TypeScript > 4.1 is mandatory because I'm using the new Template Litteral Types to provide autocompletion of the color prop based of the nested colors object, so when using bg prop for exemple, you should have autocompletion for red.xxx, blue.xxx or anything defined in your colors.ts. It supports nested elements with a dot notation! (that's why TS 4.1 is required)

Framer motion

Again, personal preference here, but the starter comes with framer motion already configured to handle Next pages changes and enable some smooth transitions when navigating. You can find the default variant used for the page transitions in ~/common/framer.ts.

Testing

Jest and @testing-library/react is used to run your tests. It comes preconfigured with ts-jest so your tests also checks your types. You can look the jest.config.js and the file setupTest.ts to see what's in there. jest-styled-components is also used to have deterministic classNames within your styled components that you are testing. Cypress starter for e2e tests. Take a look at Cypress config file cypress.json

Cypress

This starter comes by default with Cypress and some sensible defaults and a custom plugin which enable you to inject your .env* files in the Cypress.env helper. It also add support for a per-environment configuration file. Just add a cypress..json. It uses by default the cypress.json and then extend the configuration if you have a cypress.<env>.json. Take a look at the various configuration file in the cypress folder and the custom plugin in cypress/plugins/index.ts. This folder is independant and lives by itself, so it has his own dependencies / scripts / tsconfig and do not pollute the global namespace. See why an isolated folder

It also have an opiniated way of interacting with some of your webpages in Cypress. As your application will grow (and pages would become complex), it's recommended to have some sort of "Page objects" which allows you to work in a more conveniant way for some complex page. See more here https://basarat.gitbook.io/typescript/intro-1/cypress#tip-creating-page-objects

Aliases

It includes by default support for aliases in tsconfig.json. They are 1 defaulted alias, ready to use :

// ~ refers to src folder
import { something } from '~/file'

You can also use for your convenience the global __DEV__ variable, which is injected by webpack with the DefinePlugin (see next.config.js).

@types and extending modules

It also includes a @types directory under src, so you can easily separate your types or extends some external modules. They are also included in the tsconfig.json For example, if some package named foo does not have any types in DefinitelyTyped, you could add a index.d.ts under src/@types/foo/index.d.ts. It is just my personal convention, so do as you want!

// src/@types/foo/index.d.ts

// to make sure Typescript get the original types from the module (if any)
import * as foo from 'foo'

declare module 'foo' {
  declare function foo(bar: string): boolean
}

Because the @types directory is declared in typeRoots, Typescript will no longer complain if you imported your package with missing types

Tooling

The template includes Prettier, ESLint (with Typescript-eslint), Babel and lint-staged. All their related configurations are in the *rc files (except for lint-staged, which is located in the package.json).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].