Skip to content

Instantly share code, notes, and snippets.

@jbaxleyiii
Created May 31, 2016 12:39
Show Gist options
  • Save jbaxleyiii/fb62514356d2e3a78902aefc6db5f25a to your computer and use it in GitHub Desktop.
Save jbaxleyiii/fb62514356d2e3a78902aefc6db5f25a to your computer and use it in GitHub Desktop.
Apollos as a monolith

Currently the DX (Developer Experience) of working on apollos powered sites, apps, or the core framework is frustratingly difficult. This doc serves as a discussion point for improvements, particuarly through the idea of consolidation of apollos projects into a monolith.

Original Structure:

  • junction
  • apollos-rock (sync)
  • apollos-core
  • apollos-give
  • my.newspring.cc (site repo)
  • newspring-app (app repo)

Current structure:

  • Junction
  • Heighliner
  • Apollos (core, give, community, profile)
  • newwwwspring.cc (my.newspring.cc site repo)
  • newspring-app (app repo)

Proposed structure

  • Junction (css framework) [UI] (near LTS)
  • Heighliner (GraphQL application) [Data] (v0.5 with 1.0 in the works)
  • Apollos (sites, component library, deploy scripts, local dev process, migrations, etc) [Client] (Not versioned)

Requirements:

  1. Supports multiple sites / apps
  • newspring.cc (s/a)
  • newspringnetwork.com (s/a)
  • newspringfuse.com (s/a)
  • perrynoble.com (s/a)
  • newspringcollege.com (s/a)
  • kidspring.com (eventual)
  • newspring.io (eventual)

Eventually, I want these site level folder to be pretty thin, as they should use dynamic templates / pages via a GUI in Rock.

  1. Supports web and app code side by side.
  2. Supports a UI component library (which is deployable as its own site?)
  3. Supports deployment strategies on a per site basis.
  4. Supports running our apollos infrastructure (including Rock eventually) via Docker
  5. Supports a command line tool to assist if needed (e.g a bin folder and apollos run newspring.cc newspringfuse.com --ios or something of the like.
  6. Has a clear and easy to understand strucutre within sites and within the core system folder
  7. Has a clear and easy to understand strucuture for writing tests
  8. Has a clear and easy to understand strucuture for writing documentation
  9. One line to get up and running

Questions:

How do we determine what is core vs what is a site? Where does core live? How do we version projects? (This is very important to me) How do we share code between sites? Where does our embed library fit into this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment