Bifröst is a single-page comic book management application that combines new comic book discovery with an integrated social, user-sharing platform. Inspired by the community-based reading application Goodreads, bifröst allows users to curate a personal reading or pull-list of comics and share these selections in a continuous public timeline.
Bifröst is composed of a React frontend—styled with React Bulma Components and FontAwesome icons, and a backend composed of an ASP.NET Core API with a Microsoft SQL Server database. Additionally, Bifröst uses Google Firebase for user authentication.
Bifröst is available online at https://bifrost.jonxo.dev. A Virtual Private Server running Ubuntu 20.04 and Docker 20.10 hosts the live application. Each main app component (frontend★, API, and database) is available in a Docker container, served via a NGINX reverse proxy, and secured using a Let's Encrypt SSL certificate.
To view sample user data, login following credentials:
- email: admin@example.com
- password: admin-test-201
Or select Register from the top-right corner of the application menu to create a new account.
★ The application frontend relies on an express server middleware to make multiple API requests, additional information is available in a related Github repo.
- Download and install Node.js and npm.
- Use https or SSH to clone the project folder to a local directory:
$ git clone ...
- From the cloned project directory:
$ npm install
- Install .NET Core
- Create a new Google Firebase Project
- In your Firebase project, enable Email/Password sign-in:
- In the Firebase console, open the Auth section
- On the Sign in method tab, enable the Email/password sign-in method and click Save
- While signed into Google Firebase, locate and copy the Firebase project ID and the Web API key.
- Create two new files and add the following content:
- In the project frontend directory(
./frontend
), create a.env.local
file and add the following: (Replace 'YOUR_FIREBASE_PROJECT_API' with the value copied in the previous step)REACT_APP_API_KEY=YOUR_FIREBASE_PROJECT_API
- In the API directory (
./bifrost
), create aappsettings.local.json
file and add the following: (Replace 'YOUR_FIREBASE_PROJECT_ID' with the value copied in the previous step){ "FirebaseProjectId": "YOUR_FIREBASE_PROJECT_ID" }
- In the project frontend directory(
- Install SQL Server Express LocalDB and configure the following:
- Install Visual Studio 2019
- At the start screen select Continue without code.
- Open the View menu and select SQL Server Object Explorer.
- Right-click the SQL Server node, select
- In the dialog that appears, expand the Local node and select the SQL Server instance called SQLEXPRESS
- Click connect
- In the Visual Studio Code SQL Server Object Explorer, right-click the SQLEXPRESS server and select New Query... from the context menu.
- Copy the contents of the
01_Bifrost_Create_DB.sql
script inSQL
directory and paste into the new query tab and click the Execute button (Control+Shift+E). - Repeat the process for the second SQL script
02_Bifrost_BuildData.sql
. - Start the application:
- Launch Visual Studio 2019 and open the project solution file:
bifrost.sln
- Click the project debug start button (F5)
- From the command line, navigate to the frontend directory and run
npm start
- Launch Visual Studio 2019 and open the project solution file:
Bifröst utilizes a static navigation menu bar to navigate application components:
Components with a * are only visible to an authenticated user.
The site landing page; displays a scrollable list of current comic releases. The home view randomizes a new featured comic cover on application load and highlights the comic in the Newsstand list.
The releases tab contains three identical views: Previous, Current, and Upcoming Comics. Each view shows a list of comics available for the corresponding release date in the upper-left corner of the page.
The Reading List tab holds all comic issues and volumes added by an authenticated user. The view includes two columns to organize unread and read content cards and provide a related total. Each content card provides an option to toggle read/unread status; a user can delete content cards with a confirmation modal.
The Activity view provides an authenticated user of reading list activity from all public users. Public user activity is colored blue, with the current authenticated user's activity colored gray. Below the public activity cards, the authenticated user can toggle a follow status to track specific users.
If an authenticated user has clicked the Follow option on a user activity card, the Follows view provides a friends list of all selected accounts. Clicking the Show Activity button for the listed user shows a user-specific timeline of reading activity cards.
Search provides user access to search for back issues or a comic volume (series of comic issues). Search results are limited to the first ten matching results.
The settings view allows authenticated users to update their account display name, user summary, and private status. When a user enables the Private Account option, the database updates to hide related user activity from the Activity and Follows views.