# Web Groundwork
WARNING
This page is a work in progress - see our planning document.
# Stacks
This section provides some recommended combinations of technology you can leverage. Feel free to use this guidance to build your own stack by adjusting them as needed (for example, by replacing certain elements or combining different stacks).
TIP
Have some technologies you enjoy using? See our Contribution Guide to add it here!
# MERN Stack
TODO
# Sync Stack
TODO
# Rob's Stack
Pros | Cons |
---|---|
Strongly typed, use of code generation reduces boilerplate. GraphQL has good tooling. | Golang does not have a steep learning curve, but can seem intimidating |
Frontend: Vue.js and Typescript
- Frameworks and libraries
- GraphQL: Vue Apollo
- Tooling
vue-cli
is a great way to kickstart the frontend - just follow the guide
- Considerations
- Pro: Vue.js is a beginner-friendly template-based library with very nice tooling via
vue-cli
, and TypeScript gives a good foundation for non-trivial projects - Con: TypeScript can have a steep learning curve, and Vue library choices might be more limited
- Pro: Vue.js is a beginner-friendly template-based library with very nice tooling via
- References
Backend: Golang
- Frameworks and libraries
- GraphQL:
gqlgen
is a great schema-first server generator - it will write most of the Go server boilerplate for you. You can also easily add an API playground, which helps a lot during development! - Logging:
zap
is a versatile logger that can output both console-style and machine-readable JSON formats
- GraphQL:
- Tooling
- The standard Go toolchain offers pretty much everything you'll need, from building to testing - see the
go
command reference
- The standard Go toolchain offers pretty much everything you'll need, from building to testing - see the
- Considerations
- If you decide to not go with GraphQL,
chi
is a lightweight Express-style library for building standard REST APIs.
- If you decide to not go with GraphQL,
- References
Datastore: DynamoDB
- Frameworks and libraries
dynamo
is a Mongo-style Go client for DynamoDB
- Tooling
- You can use the DynamoDB Docker container to run your application locally and build integration tests - see
ubclaunchpad/pinpoint
's testing Docker Compose setup
- You can use the DynamoDB Docker container to run your application locally and build integration tests - see
- Considerations
- Pro: DynamoDB is basically free for most use cases! (no cost up to 25GB as of June 2020)
- Con: DynamoDB table design requires special care due to the way it works - see the DnyamoDB best practices guide
- References
Other Tooling: None
Examples:
ubclaunchpad/ubclaunchpad.com
is a good example of a Vue.js frontend- The
bobheadxi/timelines
server has an example GraphQL implementation usinggqlgen