Skip to content

Our robust community site integrating Steam for enhanced user interactions and data management, powered by Remix with Tailwind CSS for optimistic, responsive UI. Features CI/CD with GitHub Actions and Docker for seamless deployment and maintenance.

License

Notifications You must be signed in to change notification settings

imperfectandcompany/Imperfect-Gamers-Site-Store

Repository files navigation

IMPERFECT GAMERS SITE

https://imperfectgamers.org/

Imperfect Gamers Wallpaper Rounded

last-commit

Developed with the software and tools below.

JavaScript Prettier PostCSS Autoprefixer Vite React
ESLint TypeScript Docker GitHub%20Actions JSON


steam-integration demo (oauth implicit grant flow):

pop-up flow:

https://imperfectandcompany.sharepoint.com/:v:/s/ImperfectandCompany2/EZZLemtOjPhEqc62-dKh2qsBffsSDVRdt_qqg5w9OwOK-g

redirect flow:

https://imperfectandcompany.sharepoint.com/:v:/s/ImperfectandCompany2/ETVRdeR7YJlNpNgVznK0YLYBtR6wOd-Lu7sVEDRud5AYvA

Currently living monetization model:

image

Our monetization model from two years ago (on old engine with stability):

https://cdn.imperfectgamers.org/96VFCiW.png

πŸ”— Quick Links

External


πŸ“ Overview

The Imperfect Gamers site project serves as a web front for our platform, emphasizing personalized experiences through Steam integration too aggregate data to your account for looking up stats, purchases, social and more. It provides our users with a member-centric portal where users can manage their data on our services and interact seamlessly within the community. We have a focus on Tailwind-based UI with atomic design principles, to ensure a robust, scalable, and user-friendly interface for our audience. Automated deployment and code quality processes are embedded through CI/CD pipelines, ensuring a reliable and scalable infrastructure, enriching the users and developers journey within our Imperfect Gamers ecosystem as we develop and introduce new features.


πŸ“¦ Features

Feature Description
βš™οΈ Architecture Currently involves session management through Remix and Steam integration for user authentication while using Tebex for Product management. Uses automated deployment.
πŸ”© Code Quality Code quality ensured by ESLint, Prettier, TypeScript. The codebase includes config files for consistent coding style.
πŸ“„ Documentation This is a living document and expected to remain under development until we reaach key milestones in our roadmap.
πŸ”Œ Integrations Integrates with Steam for authentication. Uses Docker for containerization, and GitHub Actions for CI/CD workflows.
🧩 Modularity Leveraging Atomic Design Methodology alongside component varients for reusability and building a uniform design.
πŸ§ͺ Testing We have strict typescript and Eslint as a mandatory requirement before merging into dev. We will introduce jest and enzyme once we put our shop into production.
⚑️ Performance With remix's recent support for Vite, we chose it as our build tool for fast build times, performance metrics will be benchmarked after we introduce testing.
πŸ›‘οΈ Security Steam integration using OAuth; bcryptjs received on API through rest for hashing passwords.
πŸ“¦ Dependencies Key libs: React, TailwindCSS, TypeScript, TailwindCSS, Remix, Remix Utilities: ESLint, Prettier, Vite, PostCSS.
πŸš€ Scalability Uses Remix from Shopify, which is scalable and in competition with Next.JS (although React is backing Next.JS), but follows latest trending support for Server-Side-Rendering Full-Stack Development.

πŸ“‚ Repository Structure

View Structure

Structure overview

  • entry.client.tsx & entry.server.tsx: Entry points for client and server, respectively, showcasing our SSR strategy.
  • root.tsx: The root component that wraps the entire application, setting the stage for a cohesive user experience.
  • store.css & tailwind.css: Core styling files, driving the visual consistency and responsiveness of the module.
  • components/atoms: Basic UI elements like buttons and inputs, forming the building blocks of our interface.
  • components/molecules: Combinations of atoms into functional units such as forms and cards, enhancing the modularity of our design.
  • components/organisms: Complex UI segments like membership tiers and FAQ sections, demonstrating advanced composition and functionality.
  • components/templates/store: High-level layouts specific to the store module, orchestrating the overall user interface.
└── imperfect-gamers-site/
    β”œβ”€β”€ .github
    β”‚   β”œβ”€β”€ CODEOWNERS
    β”‚   └── workflows
    β”‚       β”œβ”€β”€ build_and_deploy.yml
    β”‚       └── eslint_prettier_pr_check.yml
    β”œβ”€β”€ Dockerfile
    β”œβ”€β”€ README.md
    β”œβ”€β”€ app
    β”‚   β”œβ”€β”€ auth
    β”‚   β”‚   β”œβ”€β”€ authenticator.server.ts
    β”‚   β”‚   β”œβ”€β”€ session.ts
    β”‚   β”‚   β”œβ”€β”€ steam.server.ts
    β”‚   β”‚   β”œβ”€β”€ storage.server.ts
    β”‚   β”‚   └── user.server.ts
    β”‚   β”œβ”€β”€ components
    β”‚   β”‚   β”œβ”€β”€ atoms
    β”‚   β”‚   β”‚   β”œβ”€β”€ Button
    β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ Button.tsx
    β”‚   β”‚   β”‚   β”‚   └── ButtonProps.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Heading
    β”‚   β”‚   β”‚   β”‚   └── Heading.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ IconElement.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Image.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Input
    β”‚   β”‚   β”‚   β”‚   └── Input.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Link
    β”‚   β”‚   β”‚   β”‚   └── Link.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Modal
    β”‚   β”‚   β”‚   β”‚   └── Modal.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Paragraph
    β”‚   β”‚   β”‚   β”‚   └── Paragraph.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ PriceLabel
    β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ PriceLabel.module.css
    β”‚   β”‚   β”‚   β”‚   └── PriceLabel.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Text.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ TextElement.tsx
    β”‚   β”‚   β”‚   └── ToggleSwitch
    β”‚   β”‚   β”‚       β”œβ”€β”€ ToggleSwitch.module.css
    β”‚   β”‚   β”‚       └── ToggleSwitch.tsx
    β”‚   β”‚   β”œβ”€β”€ molecules
    β”‚   β”‚   β”‚   β”œβ”€β”€ AuthorizeForm.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ EventItem.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ FAQItem.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ FeaturedItem.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ FooterLink.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ IconText.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ LoginForm.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ ModalContent
    β”‚   β”‚   β”‚   β”‚   └── ModalContent.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ PriceToggle
    β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ PriceToggle.module.css
    β”‚   β”‚   β”‚   β”‚   └── PriceToggle.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ SignUpForm.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ StatisticItem.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ TitleDescription.tsx
    β”‚   β”‚   β”‚   └── UsernameForm.tsx
    β”‚   β”‚   β”œβ”€β”€ organism
    β”‚   β”‚   β”‚   β”œβ”€β”€ AuthForms
    β”‚   β”‚   β”‚   β”‚   └── AuthForms.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ ContactForm.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ FAQSection.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ FeaturedPartnership.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ FeaturedSection.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ MembershipCard
    β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ MembershipCard.module.css
    β”‚   β”‚   β”‚   β”‚   └── MembershipCard.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ MembershipTier.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ ModalWrapper
    β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ ModalWrapper.module.css
    β”‚   β”‚   β”‚   β”‚   └── ModalWrapper.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ StatisticsGroup.tsx
    β”‚   β”‚   β”‚   β”œβ”€β”€ Testimonial.tsx
    β”‚   β”‚   β”‚   └── UnauthenticatedView.tsx
    β”‚   β”‚   └── templates
    β”‚   β”‚       └── store
    β”‚   β”‚           β”œβ”€β”€ StoreContact.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreEvents.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreFAQ.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreFeatured.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreFooter.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreHeader.tsx
    β”‚   β”‚           β”œβ”€β”€ StorePartnership.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreStatistics.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreTestimonials.tsx
    β”‚   β”‚           β”œβ”€β”€ StoreTiers.tsx
    β”‚   β”‚           └── index.tsx
    β”‚   β”œβ”€β”€ entry.client.tsx
    β”‚   β”œβ”€β”€ entry.server.tsx
    β”‚   β”œβ”€β”€ root.tsx
    β”‚   β”œβ”€β”€ routes
    β”‚   β”‚   β”œβ”€β”€ _index.tsx
    β”‚   β”‚   β”œβ”€β”€ auth.check.username.tsx
    β”‚   β”‚   β”œβ”€β”€ auth.finalize.username.tsx
    β”‚   β”‚   β”œβ”€β”€ authorize.check.steam.tsx
    β”‚   β”‚   β”œβ”€β”€ authorize.steam.callback.tsx
    β”‚   β”‚   β”œβ”€β”€ authorize.steam.tsx
    β”‚   β”‚   β”œβ”€β”€ login.tsx
    β”‚   β”‚   β”œβ”€β”€ logout.tsx
    β”‚   β”‚   β”œβ”€β”€ register.tsx
    β”‚   β”‚   β”œβ”€β”€ store.add.tsx
    β”‚   β”‚   β”œβ”€β”€ store.create.tsx
    β”‚   β”‚   └── store.tsx
    β”‚   β”œβ”€β”€ styles
    β”‚   β”‚   β”œβ”€β”€ MembershipCard.css
    β”‚   β”‚   └── store.css
    β”‚   β”œβ”€β”€ tailwind.css
    β”‚   └── utils
    β”‚       β”œβ”€β”€ general.ts
    β”‚       β”œβ”€β”€ steamAuth.ts
    β”‚       β”œβ”€β”€ tebex.d.ts
    β”‚       β”œβ”€β”€ tebex.interface.ts
    β”‚       β”œβ”€β”€ tebex.server.ts
    β”‚       β”œβ”€β”€ tebexjs.ts
    β”‚       └── useTebexCheckout.ts
    β”œβ”€β”€ package-lock.json
    β”œβ”€β”€ package.json
    β”œβ”€β”€ postcss.config.js
    β”œβ”€β”€ public
    β”‚   β”œβ”€β”€ 1.0.0.js
    β”‚   └── favicon.ico
    β”œβ”€β”€ tailwind.config.ts
    β”œβ”€β”€ tsconfig.eslint.json
    β”œβ”€β”€ tsconfig.json
    └── vite.config.ts

🧩 Files

Open Directory

This section is currently in process

.
File Summary
tailwind.config.ts TODO: Document summary for this file
Dockerfile TODO: Document summary for this file
tsconfig.json TODO: Document summary for this file
postcss.config.js TODO: Document summary for this file
vite.config.ts TTODO: Document summary for this file
package.json TODO: Document summary for this file
tsconfig.eslint.json TTODO: Document summary for this file
package-lock.json TODO: Document summary for this file
public
File Summary
1.0.0.js TODO: Document summary for this file
.github
File Summary
CODEOWNERS TODO: Document summary for this file
.github.workflows
File Summary
eslint_prettier_pr_check.yml TODO: Document summary for this file
build_and_deploy.yml TODO: Document summary for this file
app
File Summary
entry.server.tsx TODO: Document summary for this file
entry.client.tsx TODO: Document summary for this file
root.tsx TODO: Document summary for this file
tailwind.css TODO: Document summary for this file
app.styles
File Summary
store.css TODO: Document summary for this file
MembershipCard.css TODO: Document summary for this file
app.utils
File Summary
tebexjs.ts TODO: Document summary for this file
tebex.d.ts TTODO: Document summary for this file
steamAuth.ts TODO: Document summary for this file
general.ts TODO: Document summary for this file
tebex.interface.ts TODO: Document summary for this file
tebex.server.ts TODO: Document summary for this file
useTebexCheckout.ts TODO: Document summary for this file
app.routes
File Summary
store.tsx TODO: Document summary for this file
authorize.check.steam.tsx TTODO: Document summary for this file
register.tsx TODO: Document summary for this file
logout.tsx TODO: Document summary for this file
auth.check.username.tsx TODO: Document summary for this file
store.add.tsx TODO: Document summary for this file
auth.finalize.username.tsx TODO: Document summary for this file
login.tsx TODO: Document summary for this file
authorize.steam.tsx TODO: Document summary for this file
authorize.steam.callback.tsx TODO: Document summary for this file
store.create.tsx TODO: Document summary for this file
_index.tsx TODO: Document summary for this file
app.components.templates.store
File Summary
StoreFooter.tsx TODO: Document summary for this file
StoreFAQ.tsx TODO: Document summary for this file
StoreContact.tsx TODO: Document summary for this file
index.tsx TODO: Document summary for this file.
StoreHeader.tsx TODO: Document summary for this file
StoreStatistics.tsx TODO: Document summary for this file
StoreEvents.tsx TODO: Document summary for this file
StoreTiers.tsx TODO: Document summary for this file
StoreFeatured.tsx TODO: Document summary for this file
StoreTestimonials.tsx TODO: Document summary for this file
StorePartnership.tsx TODO: Document summary for this file
app.components.atoms
File Summary
TextElement.tsx TODO: Document summary for this file
IconElement.tsx TODO: Document summary for this file
Text.tsx TODO: Document summary for this file
Image.tsx TODO: Document summary for this file
app.components.atoms.Button
File Summary
Button.tsx TODO: Document summary for this file
ButtonProps.tsx TODO: Document summary for this file
app.components.atoms.PriceLabel
File Summary
PriceLabel.tsx TODO: Document summary for this file
PriceLabel.module.css TODO: Document summary for this file
app.components.atoms.ToggleSwitch
File Summary
ToggleSwitch.tsx TODO: Document summary for this file
ToggleSwitch.module.css TODO: Document summary for this file
app.components.atoms.Paragraph
File Summary
Paragraph.tsx TODO: Document summary for this file
app.components.atoms.Modal
File Summary
Modal.tsx TODO: Document summary for this file
app.components.atoms.Link
File Summary
Link.tsx TODO: Document summary for this file
app.components.atoms.Heading
File Summary
Heading.tsx TTODO: Document summary for this file
app.components.atoms.Input
File Summary
Input.tsx TODO: Document summary for this file
app.components.organism
File Summary
FeaturedPartnership.tsx TODO: Document summary for this file
Testimonial.tsx TODO: Document summary for this file
MembershipTier.tsx TODO: Document summary for this file
ContactForm.tsx TODO: Document summary for this file
FAQSection.tsx TODO: Document summary for this file
UnauthenticatedView.tsx TODO: Document summary for this file
FeaturedSection.tsx TODO: Document summary for this file
StatisticsGroup.tsx TODO: Document summary for this file
app.components.organism.ModalWrapper
File Summary
ModalWrapper.module.css TODO: Document summary for this file
ModalWrapper.tsx TODO: Document summary for this file
app.components.organism.MembershipCard
File Summary
MembershipCard.tsx TODO: Document summary for this file
MembershipCard.module.css TODO: Document summary for this file
app.components.organism.AuthForms
File Summary
AuthForms.tsx TODO: Document summary for this file
app.components.molecules
File Summary
UsernameForm.tsx TODO: Document summary for this file
EventItem.tsx TODO: Document summary for this file
FAQItem.tsx TODO: Document summary for this file
LoginForm.tsx TODO: Document summary for this file
FeaturedItem.tsx TODO: Document summary for this file
SignUpForm.tsx TODO: Document summary for this file
TitleDescription.tsx TODO: Document summary for this file
FooterLink.tsx TODO: Document summary for this file
StatisticItem.tsx TODO: Document summary for this file
IconText.tsx TODO: Document summary for this file
AuthorizeForm.tsx TODO: Document summary for this file
app.components.molecules.ModalContent
File Summary
ModalContent.tsx TODO: Document summary for this file
app.components.molecules.PriceToggle
File Summary
PriceToggle.tsx TODO: Document summary for this file
PriceToggle.module.css TODO: Document summary for this file
app.auth
File Summary
user.server.ts TODO: Document summary for this file
session.ts TODO: Document summary for this file
storage.server.ts TODO: Document summary for this file
steam.server.ts TODO: Document summary for this file
authenticator.server.ts TODO: Document summary for this file

πŸš€ Getting Started

Requirements

Ensure you have the following dependencies installed on your system:

βš™οΈ Installation

To get a local copy up and running, follow these simple steps:

  1. Clone the repository:
git clone https://github.com/imperfectandcompany/imperfect-gamers-site.git
  1. Navigate to the project directory:
cd imperfect-gamers-site
  1. Install dependencies:
npm install

πŸ€– Running imperfect-gamers-site

Use the following command to run imperfect-gamers-site:

npm run dev

πŸ§ͺ Tests

Pending (view Project Roadmap)


πŸš€ Strategy

Phases

Phase 1: Foundation and Core Setup

  • Milestone 1: Project Initialization
    • Repository setup and initial commit
    • Base tooling and framework selection
  • Milestone 2: Environment Setup
    • Integration of Tailwind CSS
    • Setup of build and deployment pipelines
  • Milestone 3: Developer Tooling
    • Integrate Jest and Enzyme for testing

Phase 2: Feature Development and Integration

  • Milestone 4: Authentication System
    • Implement basic AuthForms and session management
    • E2E login, registration, and logout implementation
    • Secure Steam integration
  • Milestone 5: Validation
    • Validate Onboarding
    • Validate Account Steam integration

Phase 3: Store Page MVP

  • Milestone 6: Store Module Functionality
    • Ensure user meets all requirements before triggering store
    • Allow user to complete onboarding and steam integration within flow
    • Create webhook and perform delivery for payment event

Phase 4: User Experience Enhancement

  • Milestone 7: User Interface Polish
    • Complete Atomic Design conversion for components
    • Enhance signup and login flow with UX improvements
  • Milestone 8: Advanced Features Integration
    • Integrate Headless Tebex API features for behind-the-scenes product management
    • Integrate TebexJS 1.0.0 Checkout Modal for a seamless checkout experience

Phase 5: Optimization and Scaling

  • Milestone 9: Performance Tuning
    • Optimize application loading times
    • Implement comprehensive caching strategies
  • Milestone 10: Preparation for Scale
    • Maximize test coverage to ensure stability
    • Perform benchmark tests for future comparison
    • Review infrastructure scalability for anticipated growth

Phase 6: Store Pre-Launch and Launch

  • Milestone 11: Pre-Launch Checks
    • Conduct final security audits
    • Perform user acceptance testing (UAT)
  • Milestone 12: Launch
    • Go-live with the store page
    • Document real-time user feedback on Discord and from staff
    • Monitor system performance

Phase 7: Post-Launch Activities

  • Milestone 13: Post-Launch Support and Maintenance
    • Address immediate post-launch feedback and issues
    • Plan and initiate the next iteration of features and improvements

Phase 8: Automated Feedback Loop

  • Milestone 14: Continuous Feedback Implementation
    • E2E implementation of contact form for guests
    • E2E implementation of support tickets for users
    • E2E implementation for reviews

Phase 9: Account Permissions Utility

  • Milestone 15: Role-Based Access Control
    • Map logged-in user to role
    • Create wrapper passed with expected permission for rendering

Phase 10: Admin Dashboard

  • Milestone 16: Admin Tools and Reviews
    • E2E implementation of support tickets for users
    • E2E implementation for reviews (product/site/server/general)

πŸ›  Project Roadmap

Tasks

Completed Tasks

  • Integrate Tailwind CSS for styling
  • Create Store page layout
  • Design and split the page into sections using the Atomic Design methodology
  • Convert all components to use Atomic Design, with detailed examples in the Button folder under molecules
  • Introduce default prop fallbacks, design tokens, and variants
  • Setup modal for Premium Membership CTA
  • Implement AuthForms with conditional rendering
    • SignUp/SignIn/LoggedInView
    • OnboardingRequiredView/SteamIntegrationRequiredView/LoggedInAndValidatedView
  • Integrate remix-validated-form with Zod for form validation
  • Design and set up the sign-up process
  • Set up Remix session storage for state management
  • Implement end-to-end login and onboarding validation
  • Add live check for username availability during onboarding
  • Integrate Steam validation and flow within the product flow
  • Add Tebex product management API calls
  • Integrate ESLint and Prettier to enforce coding style
  • Setup remix-utilities for header IP fetching
  • Call Tebex API with user IP and UID to create and manage user basket
    • Automatically add Premium Membership to user basket
  • Implement remix-dev for easier testing
  • Setup logout with user data cleanup
  • Setup validation/error handling for Tebex API
  • Add cookie session management for Tebex checkout API data
  • Document files across the project
  • Set up dev branch, rename master to production
  • Integrate TebexJS 1.0.0 for e-commerce checkout popup
  • Secure Steam integration
  • Finalize logout functionality with token invalidation
  • Finish registration process
  • Enforce cookie typing for checkout process
  • Setup protected dev branch for PR merges
  • Setup GitHub Action for ESLint compliance checks
  • Setup GitHub Action to build Docker image (remix vite:build)
  • Setup webhook action for server updates

Upcoming Tasks

  • Refactor other existing pages on ImperfectGamers.org
  • Further enhance the integration of design tokens across components
  • Expand the Tebex integration to support additional product types
  • Optimize performance and loading times across all modules
  • Extend authentication flows to include more third-party integrations
  • Develop more comprehensive user analytics features
  • Add jest / enzyme unit and integration test coverage across components

πŸ“„ License

/* Β© Imperfect and Company LLC - All Rights Reserved
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and Read-only, April 2024
 */

πŸ‘ Acknowledgments

Case Study / Strategic Partnership with Tebex.

Logo Copyright 2020 Β© Imperfect Gamers.

Return