HiSports Tech Specs



  • API (api.hisports.app)

    • Node.js / Loopback 3

    • Postgres with Knex schema migrations.

      • Loopback provides majority of the ORM functionality, with some additional patches to add support for joins and custom querying needed for authorization filtering

    • Passport / oauth2orize

      • Authorization based on hierarchical RBAC

      • Administrative users assigned a role in an office

      • Team staff and game officials have dynamic roles based on account participant

    • RabbitMQ event queueing

      • Scoresheet events are queued to be processed through scoresheet library (see below) and stored in database

      • Scheduling changes synced to Assignr (one-way)

      • Email notifications sent on scoresheet completed event

    • Hosted on Elastic Beanstalk / EC2 / Aurora / SES

    • Lambda running scheduled trigger for HCR sync via API request

  • Scorekeeper app (hisports.app)

    • Scoresheet editor for all game functions - lineups, goals, penalties, etc

    • AngularJS 1.5 

    • redux + redux-offline

      • When offline, events are queued and persisted to storage until online, but also actioned locally for local state. On initial load, state from server is used

    • ui-router 1

    • SASS / Ionic 1

      • Ionic mostly removed except for base styling

    • webpack / babel build

    • SPA hosted on Netlify

  • Admin app (admin.hisports.app)

    • Scheduling, account management, roster management, reporting, CMS editor, officiating assignments

    • react-admin / material-ui

    • final-form

    • Slate editor

    • webpack / babel (CRA)

    • SPA hosted on Netlify

  • Website (*.hisports.site)

    • Public facing websites for leagues to show schedule, stats, standings, player profiles and CMS. Each league has its own website deployed

    • Bootstrap

    • react-router

    • webpack / babel build

    • SPAs hosted on Netlify (individual site per league with build-level config)

  • Game Report (pdf.hisports.app, reports.hisports.app)

    • Official game report showing printable game summary

    • React

    • SASS

    • webpack / babel build

    • SPA hosted on Netlify

    • Puppeteer Lambda to generate PDFs of Netlify site

    • Users access SPA indirectly through lambda

  • Reporting (metabase.hisports.app)

    • Scoring, penalty and AP reports for a league/team/player

    • Metabase

    • Embedded iframes in admin; users do not have direct access

  • Libraries

    • Scoresheet

      • redux event handling

      • yup event validation

      • Shared across all apps

    • Stats

      • Stats are generated based on a scoresheet provided and map-reduced into relevant stats, using selectors/utilities from scoresheet library

    • Scheduler

      • General patterns extracted from a template to generate a set of matchups for any number of teams/weeks

  • Operations

    • Cloudflare DNS

    • Buddy CI (buddy.works)

    • Sentry error reporting

    • Github repository