DISCLAIMER: Work in progress
BGAchievements is (or at this point in time rather "will be") a web application to craft, rate and share achievement sets for your favorite board games. Think of Steam achievements for board gaming.
This project is an endeavour of board game and web development enthusiasts. Our goals are diving deeper into some of the intricacies of modern web development as well as producing a lovable product we will be eventually able to use :) All of our main contributors work in the tech industry and share a deep passion for gaming and board games in particular.
- Determine initial feature set
- Create Mockups
- Create basic designs
- Create static prototype
- Create data model
- Create project baseline / dev / deployment workflow
Scheduled for summer/autumn 2018
- User registration
- Creation of private achievement sets
- Achievement tracking and (hopefully) a satisfying unlocking experience (think of Hearthstone booster packs 😄)
- Public hosting and starting an alpha phase
No schedule, yet.
- Sharing, rating, commenting of achievement sets
- Merging achievement sets
- Starring achievement sets
- Search through sets for specific games
- Currated sets (board game authors, offical sets etc.)
- Landing page showing latest and hottest achievement sets
- Managing game collections and sets per user
- Get list of games by connecting to the boardgamegeek api
Yes. We hope to be able to maintain the app without subscription fees or any additional costs attached to it. However depending on the success of the project server costs might increase so we will probably add a way to donate later down the road.
TL'DR: No! :(
Actually we are currently just starting out.
We are currently just starting out and need to "stabilize" our development workflow. Therefore we will currently only take "light weight" contributions marked with the label help wanted. Later on we will probably start to open things up a bit and also make some more technically advanced issues open for contribution.
The first setup needs a database connection. The chosen DBMS is PostgreSQL, which you can download here.
- Create a database of your choice
- either through SQL: CREATE DATABASE db_name
- or in a command-line: createdb db_name
- use the scripts from sql folder to create the database and some demo data
- psql -d db_name -f sql/01-initial-schema.sql -U postgres
- psql -d db_name -f sql/02-demo-data.sql -U postgres
To build the Spring Boot REST application, provide an application.properties file containing your database connection properties
Sample application.properties:
spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/testdb?currentSchema=bgachievements
spring.datasource.username=user
spring.datasource.password=secret
Then start the application in a comand-line using
./gradlew bootRun
on Linux machines or
gradlew bootRun
on Unix-like machines in you project root.
To install all project dependencies simply run
npm i
This project includes quite a few opinionated settings which where made according to our own guidelines. Therefore this template includes:
- React as view-library
- Redux for state management
- Redux-loop for sideeffects
- Reselect for selector memoization
- Styled-components for component level CSS styling
- Axios for request handling
- Webpack as module bundler, dev server and build tool
- Babel for ES6 and Flow transpilation
- Flow as type-checker
- Standard as JS linter
- Jest as testing framework
- normalize.css as CSS-reset
To start the development server run:
npm start
This will start an instance of webpack-dev-server on localhost:3000
as well as an instance of
json-server which provides a fake api on localhost:8089
.
From then on the whole project will rebuild, run your JS files through the Flow type-checker and
lint your JS with standard whenever you save a file.
You can also run client and api separately by using the following commands:
npm run api
npm run client
To separately type-check your JS-files, run:
npm run flow
To add third party library flow support use flow-typed.
If the library of your choice does not support flow, you can add
an entry to flow-typed/libDefs.js
. The declaration should look like this:
declare module 'myModule' {
declare module.exports: any
}
If a local module is not resolved correctly you can add an option to
the .flowconfig
like so:
[options]
module.system.node.resolve_dirname=src
To separately lint your JS-files, run:
npm run lint:js
or to autmatically fix issues if possible, run:
npm run lint:js:fix
To lint styled-components run
npm run lint:css
Tests should usually live next to their base files and should
be named like: <myBaseFile>.test.js
.
To run Jest an check if your tests pass invoke:
npm run test
To run jest and generate coverage, run:
npm run test:coverage
To view the coverage files inside your browser, open the index.html
inside
coverage/lcov-report/
.
To continuously run Jest and have Jest watch for changes, run:
npm run test:watch
To build the project, run:
npm run build
This will compile, minify and bundle everything and put all packaged files into the dist/ directory (if there is no such directory it will just be newly created, an existing directory will be removed first). To allow our clients browsers to cache vendor files and only update the cache when it is really necessary, all important filenames include hashes for reference inside the built manifest file.
We use SemVer for versioning.