Code Monkey home page Code Monkey logo

crucible's Introduction

Crucible

Fully client-side single-page application talking to FireBase to build a customizable CMS backed by a robust RESTful API. (Because the API is just FireBase!)

Installation

  1. npm install crucible
  2. Rename index-example.html to index.html, changing the <base> tag if necessary
  3. Rename config-example.js to config.js and set your firebase endpoint
  4. Open index.html in a browser

Development

  1. Create a fork of https://github.com/tivac/crucible
  2. git clone https://github.com/<username>/crucible.git
  3. cd crucible
  4. npm install
  5. Rename index-example.html to index.html, changing the <base> tag if necessary
  6. Rename config-example.js to config.js and set your firebase endpoint
  7. npm run build
  8. npm start
  9. Open http://localhost:9966 in a browser

Usage

You'll want to create a schema first. Schemas are JSON-ish documents that contain some number of fields.

Once you've created a schema you can create instances of that schema. All edits are synced in near-real-time to FireBase, so your data should always be in sync.

Schema Documentation

crucible's People

Contributors

ctcleary avatar kevinkace avatar ryan-mcmillan avatar tivac avatar voodoochild avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crucible's Issues

Need ability to backup DB

Firebase offers this but only on their $150/month plan.

Automated backups are cooler, but perhaps a button to backup to S3 would suffice for now.
Might be nice to store the last backup date, and nag users if it's been more than 5 days.

Relationship search is broken

firebase-web.js:130 Uncaught Error: Query.equalTo failed: First argument contains undefined in property 'content'cg @ firebase-web.js:130bg @ firebase-web.js:129g.kg @ firebase-web.js:239ctrl.sources @ relationship.js:27ctrl.oninput @ relationship.js:39(anonymous function) @ mithril.js:669(anonymous function) @ mithril.js:482

Preview URL option

Should have a standardized way to provide a preview URL when defining a schema, so that users can have a straight-forward "Preview" button on every piece of content they edit.

It'd depend on the back-end systems doing the right thing, so this may be problematic in practice.

Select doesn't support strings for options value

Not sure if this was never the intention (in which case the readme needs an update), or just doesn't yet work.

{
  type : "select",
  options : {
    one : "one", // doesn't work
    two : {
      value : "two" // works
  }
}

Don't round-trip to firebase before updating

We should update a local data representation, then sync that to firebase every so often (5s-ish?). Sometimes going out to firebase is just too laggy.

When the firebase data updates we can use lodash.assign to merge them back together, with local data splatting over the firebase data to ensure that local edits aren't lost. This isn't 100% safe if multiple people are editing the same content at the same time, but it's as close as we've got w/o doing something much more complicated.

Add field visibility logic support

Might be valuable to be able to say "Field B should only show up if Field A is Value C".

It keeps coming back up, I'm a bit wary of it though. Could be super-useful, could also be a bit of a slippery slope towards self-aware schemas.

Layout shouldn't know about the nav component

Right now layout reserves space for the nav component, but IMO it shouldn't. Layout should only care about the left-most nav and the content area beyond. Pages should show the sub-nav if they want it (since only content-edit does). Right now they're too coupled.

Content sorting

Content table should be sortable by some form of fields.

Name/Created/Updated at the very least.

Names aren't saving

Almost certainly tied to my changes to make saving manual, need to investigate ASAP.

Content searching

Would be useful to be able to search for content by name, I assume.

Missing dependencies?

> [email protected] start /Users/hendrik/work/crucible
> node build/serve.js


/Users/hendrik/work/crucible/node_modules/postcss-import/index.js:13
var resolvedPromise = new Promise(function(resolvePromise) {
                          ^
ReferenceError: Promise is not defined
    at Object.<anonymous> (/Users/hendrik/work/crucible/node_modules/postcss-import/index.js:13:27)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/hendrik/work/crucible/build/serve.js:58:9)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)

Add unpublish date field to all content entries

All content entries should have the option to set an unpublish date field, similar to the publish field.
Every piece of content won't benefit from this, but will be nice for those that do (news posts, sidebars, CTA features). The two fields can be used together without needing an additional publish state field.

Various states:

publish unpublish state
blank blank draft
future date blank scheduled
past date blank published
future date ++future date scheduled
past date future date published
--past date past date expired

https://github.com/tivac/crucible/blob/master/src/pages/content-edit/publishing.js

Replace unique-slug

It adds SIX HUNDRED KILOBYTES to the size of the unminified bundle.

That is without source maps, cripes.

Select should support disabled

Would be helpful when you want to force someone to make a conscious decision:

{
  "type*" : "select",
  options : {
    nag : {
        selected : true,
        disabled : true,
        value    : "Please make a section"
      },
    one : {
        value : "option 1"
      },
    two : {
        value : "option 2"
      }
  }
}

Track user actions

Would be potentially worthwhile to keep tabs of things users have edited in some sort of order so we can show them recency info.

Could just do it in local storage, but might as well shove it into Firebase since we're already wired up to it and they're (potentially) authed. Wouldn't track that if they aren't authed, obviously.

Add logout UI

It's already got a route, but it needs some UI somewhere. Probably in the nav bar?

Add option to specify key for schemas

Right now the key for a schema input is also used for the label, but may want to have different values.

{
  "What is your name?" : {
    type : "text",
    key  : "name"
  }
}

This does make is less apparent when you've stomped on a previous input:

{
  name : "text",
  "What is your real name?" : {
    type : "text",
    key  : "name"
  }
}

Need a logo

Everyone knows that any good home-spun CMS needs a natty logo to go with the cool name.

I suggest that we hit up some ANet Photoshop wizards to come up with something based on this:

Crucible

I would also be okay with someone coming up with a slogan that has something to do with pouring molten hot content.

Add UI for revisions

Crucible supports a really simple versioning scheme, there should be UI that exposes past revisions, let's you view their data (BUT NOT EDIT), and replace the current revision w/ one from the past (implicitly saving the current revision as a new item on the revisions list).

Visual diffing would be interesting but that's a huge rabbit hole I'm not really ready to fall down just yet. Also probably not so useful as to be worth the time it'd take right now.

Remove schema edit icon

Instead of building a "proper" permissions system, we should just make it less likely that someone using it will end up editing a schema on accident.

In the long term this should live in a new place, but for now needing to know to add /edit to the end of a URL is "good enough".

Fix table header sorting arrows

Broke 'em in the transition to the SVG icons, will need to figure out how to fix that.

Options are sticking w/ generated content or including a <svg> tag, basically. Should be straightforward.

Home Page

Need to figure out what should be on the home page, what is useful for a user?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.