Crosshare is a free community for crossword constructors and solvers. Crosshare is written in TypeScript using Next.js, React, and firebase.
Use GitHub issues for bug reports and feature requests. There is an active community on Discord which is great place to ask questions or discuss ideas.
Contributions are very much encouraged! It's recommended that you comment on (or create) the relevant issue before starting work so that we don't have multiple folks duplicating efforts simultaneously (or mention it on Discord!). Once you're happy with your changes please submit a pull request describing the change, any concerns, etc. PRs that include tests for the changed behavior are much more likely to be swiftly merged.
If you're looking for good issues to start out on check the good first issue tag.
In addition to the test suites, all PRs are checked to match our eslint/stylelint and prettier rules. You can run $ pnpm lint
and $ pnpm format
before committing to make sure your PR will pass.
We use a devcontainer based workflow. These instructions assume you're using VS Code but should still work if you start the container some other way.
Follow the instructions here to make sure your VS Code instance is ready to use devcontainers.
Then, after checking out the Crosshare codebase open the directory in VS Code. You should see a message giving you the option to "Reopen in Container" - go ahead and do that. It might take a little while to build the container if it's your first time using it. Open a terminal in VS Code with ctrl-` and run the following commands:
# cd app
# pnpm install
Since it's your first time using pnpm you should get prompted that corepack will install it. Hit 'Y' and wait for all of the dependencies to install. Now run the following three commands:
# cp firebaseConfig.emulators.ts firebaseConfig.ts
# pnpm compileI18n
# pnpm emulate
The last command will bring up the firebase emulators and then start Crosshare. When everything is running you should see ✓ Ready
at the bottom of your terminal. Now the site should be visible at http://localhost:3000 and the emulator admin at http://localhost:4000
The emulators will start with some demo data. We try to keep the demo dataset small but would like for it to cover basic use/test cases. Note that the word database (used for autofill) included in the demo dataset only includes words w/ <= 5 characters, to keep the filesize down. Each time you start the dev server any auth/database changes are reset to match the demo dataset.
If you need to alter the demo data to expand what's available please do so. While the dev server is running make any changes you need, either through the user interface itself or through the emulator admin. Then in a new terminal run:
# firebase emulators:export --force --project demo-crosshare emulator-data
If you feel your change to the demo data will be generally useful please feel free to include it in your PR with a description of what has been changed.
While the emulators are running use the following command (in a second terminal) to start the test runner:
# pnpm test
Once it's started you can hit a
to run all of the tests. Alternatively, if the emulators aren't already running you can use:
# pnpm emulatorAndTest
That'll start just the firestore emulator (the only one needed for tests) and then launch the test runner.
There are also playwright tests that can be run (while the app is running), but YMMV with these:
# pnpm playwright test
See the contributors on this repository and crosshare.org/donate.
Crosshare is licensed under the GNU Affero General Public License 3.