{"id":19774189,"url":"https://github.com/jabref/jabrefonline","last_synced_at":"2025-04-30T18:33:01.190Z","repository":{"id":37005531,"uuid":"344841169","full_name":"JabRef/JabRefOnline","owner":"JabRef","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-07T19:50:40.000Z","size":53707,"stargazers_count":32,"open_issues_count":72,"forks_count":10,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-11-07T20:37:50.457Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.jabref.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JabRef.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["tobiasdiez","JabRef"]}},"created_at":"2021-03-05T14:47:44.000Z","updated_at":"2024-11-04T06:07:38.000Z","dependencies_parsed_at":"2023-09-22T21:50:53.321Z","dependency_job_id":"2aae5920-1ba0-4cdb-926c-15f573942e17","html_url":"https://github.com/JabRef/JabRefOnline","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JabRef%2FJabRefOnline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JabRef%2FJabRefOnline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JabRef%2FJabRefOnline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JabRef%2FJabRefOnline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JabRef","download_url":"https://codeload.github.com/JabRef/JabRefOnline/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224219555,"owners_count":17275477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T05:12:11.845Z","updated_at":"2025-04-30T18:33:01.184Z","avatar_url":"https://github.com/JabRef.png","language":"TypeScript","funding_links":["https://github.com/sponsors/tobiasdiez","https://github.com/sponsors/JabRef"],"categories":[],"sub_categories":[],"readme":"# JabRefOnline\n\nThis repository contains the source of the [JabRef homepage](https://www.jabref.org/).\n\n## Servers\n\n- Production server: [www.jabref.org](https://www.jabref.org/)\n  This server runs the last released version with data provided by the production database.\n- Staging server: [staging.www.jabref.org](https://staging.www.jabref.org/)\n  This server runs the latest version of the main branch with data provided by the production database.\n  Usually, you do not want to target this server. Its main purpose is to test the main branch before a release.\n- Test server: [dev.www.jabref.org](https://dev.www.jabref.org/)\n  This server runs the latest version of the main branch with test data that is usually reset on redeployment.\n  The main use of this server is for developers to test the latest version against their application without the fear to delete user data.\n  In particular, you can [log in](https://dev.www.jabref.org/user/login) using `alice@jabref.org / EBNPXY35TYkYXHs`.\n- PR previews:\n  Every pull request is deployed to a (temporary) server, which uses the same test data as the \"Test server\".\n\n## Getting started\n\nThe simplest way to start is by [opening this project in Gitpod](https://gitpod.io/#https://github.com/JabRef/JabRefOnline/).\n\n- Install [Node.js](https://nodejs.org/)\n- Install [PostgreSQL](https://www.postgresql.org/)\n- Checkout\n- Create a `.env` file in the root containing the connection URL for the database, e.g. `DATABASE_URL=\"postgresql://user:password@localhost:5432/jabref?schema=public\"`.\n- Optional: Install and start [Redis](https://redis.io/).\n  Perhaps the most straightforward way to do this is via Docker: `pnpm docker:redis`.\n  If you do not use this command, make sure that Redis is available through the port `6380` or, alternatively, add the configuration `REDIS_PORT=\u003cyour port\u003e` to the `.env` file.\n- Run `pnpm install` to install all dependencies.\n- Run `pnpm prisma:migrate:dev` to initialize the database. You may also want to use `pnpm prisma:seed` to fill the database with some initial test data.\n\nNow you can start the server by using `pnpm dev`.\n\nIf you use Visual Studio Code, you might also want to activate automatic tasks which would then be run whenever you open the project and run the usual commands to get you running in no time.\nFor this, open the command palette (Shift + Cmd + P) and choose \"Tasks: Manage Automatic Tasks in Folder\".\nThen accept \"Allow Automatic Tasks in Folder\".\nNow close and re-open the workspace.\n\n## Commands\n\n| Command            | Description                                                                                                                                                                                                              |\n| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| pnpm install       | Install project dependencies and generate code.                                                                                                                                                                          |\n| pnpm dev           | Start Nuxt server in development mode with hot reloading enabled. Listen on [http://localhost:3000](http://localhost:3000). The GraphQL API is then accessible at [http://localhost:3000/api](http://localhost:3000/api) |\n| pnpm test          | Execute all tests. Pass `-u` to update all snapshots.                                                                                                                                                                    |\n| pnpm build         | Build the nuxt.js web application for production.                                                                                                                                                                        |\n| pnpm start         | Start the production server built by `pnpm build` (for testing purposes).                                                                                                                                                |\n| pnpm prisma:studio | Explore data in the database using a visual editor.                                                                                                                                                                      |\n| pnpm storybook     | Start [Storybook](#ui-workflow-storybook) in your browser.                                                                                                                                                               |\n\n### Running tests locally\n\nTo run the tests locally, it's best to start the development server by running `pnpm dev`.\nThen, in a separate terminal, set the environment variable `TEST_URL` to the URL of the development server (e.g., `http://localhost:3000`)\n\n```bash\n# Linux\nexport TEST_URL=http://localhost:3000\n# Windows\n$env:TEST_URL = \"http://localhost:3000\"\n```\n\nThen you can run the tests by executing `pnpm test`.\n\n### Workflow for editing the database schema\n\n1. Prototype your new feature by making the necessary changes to `schema.prisma`.\n2. Run `pnpm prisma:push` to push the changes to the local database.\n3. Iterate until feature is ready.\n4. Run `pnpm prisma:migrate:dev` to generate new migration based on the schema changes.\n\nSee [Prisma documentation](https://www.prisma.io/docs/guides/application-lifecycle/prototyping-schema-db-push) for more details.\n\n### UI workflow: Storybook\n\nAs the primary UI development flow, we use Storybook which allows developing UI components in isolation without the need to start the whole application.\nStorybook uses so-called stories.\nEach story represents a single visual state of a component.\nFor each component its stories should be placed in the same directory, with the suffix `.stories.ts` appended.\nFor example,\n\n```\ncomponents\n│   Button.vue\n│   Button.stories.ts\n```\n\nTo start developing with Storybook, simply run `pnpm storybook`, which opens Storybook in the browser.\n\nAn up-to-date version of all Storybook components can be found [online](https://www.chromatic.com/library?appId=61142988527d34003b1e783d\u0026branch=main).\n\n## Backend: Overall Structure\n\n- `Resolver` aggregates the data, and transforms in a representation suitable for the domain layer.\n- `Service` performs input validation, authorization, sorting, and implements the business logic.\n- Data layer is handled by Prisma.\n\n## Directories\n\n- `api` contains the backend.\n- `assets` contains uncompiled assets such as styles, images, or fonts. The content of this folder will be processed by webpack, e.g. CSS has pre-processor applied.\n- `components` is where we put all our Vue.js components which are then imported into the pages.\n- `layouts` contains the layouts that determine the look and feel. [Nuxt documentation](https://nuxtjs.org/docs/2.x/directory-structure/layouts).\n- `middleware` defines custom functions that are run before rendering either a page or a group of pages. [Nuxt documentation](https://nuxtjs.org/docs/2.x/directory-structure/middleware).\n- `pages` contains the application's views and routes. Nuxt reads all the `*.vue` files inside this directory and creates the router of your application.\n- `plugins` contains Javascript plugins that are run before mounting the root Vue.js application. [Nuxt documentation](https://nuxtjs.org/guide/plugins).\n- `static` is directly mapped to the server root and contains files that have to keep their names (e.g. robots.txt) or likely won't change (e.g. the favicon). Files in this folder are not processed by webpack.\n- `store` contains Vuex Store files. [Nuxt documentation](https://nuxtjs.org/guide/vuex-store).\n\n## Recommended VS Code and Browser extensions\n\n- [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar): Add syntax highlighting and other tooling for Vue. It is also recommended to activate the [takeover mode](https://vuejs.org/guide/typescript/overview.html#takeover-mode).\n- [Prisma](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma): Add syntax highlighting, formatting, jump-to-definition and linting for Prisma Schema files.\n- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): Format code and enforces consistent style.\n- [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig): Override user/workspace VS Code settings with the provided settings in `.editorconfig`.\n- [Tailwind CSS](https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss): IntelliSense enhancement to support Tailwind.\n- [Vitest](https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer): Add integration of Vitest, i.e., visual overview of the tests and easy debugging of tests.\n- [GraphQL](https://marketplace.visualstudio.com/items?itemName=GraphQL.vscode-graphql): Add syntax highlighting and IntelliSense for GraphQL.\n- Debugger for [Firefox](https://marketplace.visualstudio.com/items?itemName=firefox-devtools.vscode-firefox-debug) or [Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome): Allow debugging web applications from within VS Code.\n- Vue.js devtools: Browser integration for debugging and investigation for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)\n- Apollo Client Devtools: Debug and analyze GraphQL on the client side for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/apollo-developer-tools/)\n\n## Technologies used\n\n- [Vue.js](https://vuejs.org/): UI framework [Documentation](https://vuejs.org/v2/guide/)\n- [NuxtJS](https://nuxtjs.org/): Vue framework [Documentation](https://nuxtjs.org/docs/2.x/get-started/installation)\n- [Prisma](https://www.prisma.io/): [Documentation](https://www.prisma.io/docs/)\n- Graphql:\n  - [GraphQL code generator](https://graphql-code-generator.com/): [Documentation](https://graphql-code-generator.com/docs/getting-started/index)\n  - [Vue Apollo](https://apollo.vuejs.org/): Graphql integration for Vue [Documentation](https://v4.apollo.vuejs.org/guide-option/)\n- [Tailwind CSS](https://tailwindcss.com/): CSS framework [Documentation](https://tailwindcss.com/docs), including [Vue Tailwind](https://www.vue-tailwind.com/docs/installation) to extract reusable components\n- [Iconify](https://icones.js.org): Font-based icons\n- [Storybook](https://storybook.js.org/): Visual testing\n\n## Conventions\n\n- Vue: Single File Components are used for all components, with a PascalCase name.\n- Tests are placed next to the file containing the code-under-test, and have the same file name with a `.spec.ts` suffix added.\n  For example,\n  ```\n  api\n  │   Resolver.ts\n  │   Resolver.spec.ts\n  ```\n- Commit messages and pull request titles follow the structure of [Conventional Commits](https://www.conventionalcommits.org).\n  The following prefixes are used:\n  - `feat`: Introduces a new feature or provides an enhancement of an existing feature\n  - `fix`: Patches a bug\n  - `refactor`: A code change that neither fixes a bug nor adds a feature\n  - `test`: Adds missing tests or corrects existing tests\n  - `docs`: Documentation only changes\n  - `chore`: Changes to the build process or auxiliary tools and libraries such as CI or package updates\n\n## References\n\n- Prisma used in different contexts: https://github.com/prisma/prisma-examples\n- Example application using Prisma and Apollo: https://github.com/poulainv/tottem\n- Example application using Nuxt: https://github.com/gyarasu/nuxt-full-stack-template\n- Example application for authentication using GraphQL Shield and Prisma: https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-auth\n- Example server using Prisma and GraphQL: https://github.com/prisma-labs/graphql-prisma-typescript\n- Example application for vue-apollo: https://github.com/Akryum/vue-apollo-todos\n- Example application using a similar stack as we (GraphQL, Vue): https://github.com/Akryum/guijs/tree/master/packages/@guijs\n- Best practices: [Node](https://github.com/goldbergyoni/nodebestpractices)\n\n## Sponsors\n\nThanks to [Chromatic](https://www.chromatic.com/) for providing the visual testing platform that helps us review UI changes and catch visual regressions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjabref%2Fjabrefonline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjabref%2Fjabrefonline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjabref%2Fjabrefonline/lists"}