Giter Site home page Giter Site logo

ggranum / tangential Goto Github PK

View Code? Open in Web Editor NEW
6.0 2.0 2.0 2.59 MB

Angular + Firebase bootstrap project / widget library, complete with authorization.

License: GNU General Public License v3.0

JavaScript 4.35% TypeScript 73.82% Shell 0.66% HTML 12.43% SCSS 8.75%
firebase angular widgets authorization quickstart help-wanted

tangential's Introduction

Tangential

Live demo available here.

Angular, Firebase, Analytics, User Management, Advertising…​

Get it all in half an hour. Live, on the web. Half an hour.

One server - provided by Firebase. No AWS, no Google Cloud. One server, massively scalable, free for development and low-traffic sites.

Don’t want ads? Don’t care about analytics? Disable them during setup and save yourself 15 minutes - and you can add them at any time in the future.

In just a few minutes you can have your site hosted by Firebase Hosting at a project-specific URL. If you have your own domain, you can point it to Firebase Hosting and - once your DNS changes propagate! - you’re sorted. A fully bootstrapped web application, managed by you, backed by some of the best tools in the industry.

Features and highlights

Tangential is young. It is growing as we use it to build out our 'proof of concept' slash validation project, SnapLog.io, which is a fully featured, ad-supported, analytics-enabled, mobile-oriented 'Life Journal' application. SnapLog combines a purpose-driven form builder with long term tracking and correlation features (aka 'charts and graphs'), letting users track, for example, their mood and medication use, and correlate the two over time.

Tangential is already a great way to bootstrap your next personal project, or even something larger in scale. For small sites that need to deploy a single web site or web application, but don’t want to deal with hosting or implementing user management from scratch, you’ll have a hard time finding anything more powerful.

Below is a list of major features. Do note that many of the widgets and components you find in the Tangential demo are actually available as separate NPM packages. E.g. the Admin Console can be used without committing to using the entire bootstrap.

Firebase Hosted

Single server hosting. With Firebase Functions and some good Firebase Rule hygiene, you don’t need a separate authentication server. How nice is that?

Angular Goodness

Angular 4+, at the moment. We’ll keep the project dependencies up to date

Built in IAM console

View, create and assign new roles and permissions. (We revamped this feature area and are in the process of adding back the 'creation and assignment' functionality - soon!).

Themed

Customizable Material Design themes, using SCSS.

Logging

Log to the browser console - you can see the output in the demo if you open your console.

Google Analytics

Connect your Google Analytics account and get clean, easy to follow page and event tracking. don’t have an Analytics account yet? We’ll walk you through how to create one.

Google AdSense

We’re still creating ad widgets, but connecting AdSense is as easy as adding your AdSense campaign id to the environments.ts file. No idea what we mean? AdSense is Google’s ad serving service, and if you want to display ads in your web site or web app, we’ll walk you through how to get started.

AoT Compilation

There are things you can’t do if you want AoT to work in an Angular project. We don’t do those things, so your project can benefit from pre-compiled code.

Lazy Loaded Modules

If only administrators can access the Admin Console, shouldn’t it only load if the current visitor is an administrator? Exactly. We keep the landing page as small as possible.

Patterns and Practices

We strive to follow Angular recommendations, so that you pick up the best 'suggested practices' simply by borrowing from the Tangential code base. Where there’s an absence of suggested or standard practice, we strive for consistency and compile-time 'traceability' - the ability to prove at compile time that a thing is correct - for an example, take note of how we added traceability to our navigation targets.

Goals

Tangential exists to bootstrap new projects past the crufty nonsense that’s so important…​ and so boring. Some of that "nonsense" gets ignored in our desire to get real things out the door, just so we feel like we’re actually getting something useful done. Ever created a home page before you could authenticate users? Right. Wrote a page that couldn’t be internationalized, even though you know that you’ll be deploying across multiple languages?

To be clear, Tangential doesn’t have built in I18N yet. We’re working on it. Alas, we suffer from the fear of never deploying as well - perhaps worse than most, which is why we are building Tangential in the first place!

Aria, I18N and I10N are the 'only' remaining key features we wish to implement before targeting a 1.0.0 release. There is absolutely nothing preventing you from using the features provided by Angular to implement these yourself: Tangential does not, and will not, implement or encourage practices that prevent developers from using Angular the way it is meant to be used.

Real tools. Not toys.

Bootstraps and demonstration projects are notorious for taking shortcuts. We don’t. If you’re new to developing against a document oriented database you will find real code here, not another instant messaging client. Tangential tackles the real problems inherent in attempting to provide security and permissions-based access against real data. Decisions must be made regarding request counts versus permissions fidelity. Do I add a CAN_VIEW_USER_EMAIL permission, so that I can create a 'Demo Administrator' account? If we do, then we must also reorganize our data such that user email addresses are stored in the UserAuthData as a reference. If we don’t, then we’d have to request each field of the UserDocument in a separate request, or route the request through a Firebase Function.

Getting Started

Please see the Tangential Demo project for the Getting Started guides.

Using this project as a bootstrap for deploying a 'Component Library'

This project’s build structure was cloned from the Angular Material2. The clone was made prior to the Material team updating their build to deliver a single, monolithic NPM project - when they aligned themselves with the Angular 'post-2.0' project structure.

If you wish to release multiple components, but develop in a single project, this project would certainly be a good place to start. You will want to take a look at the procedures for 'scoped projects' in NPM, and create a user account that has the name you want to use for the parent project. For example, our project paths here are like '@tangential/scopedProjectNames', where 'tangential' is the npm 'user' name.

What’s next for Tangential

We’ll be focusing on creating and improving the documentation for existing functionality, followed by improving that functionality itself (and rebuilding the test suite…​ sorry, we’re really providing a bad example here! It’s truly the highest priority, which will be performed in concert with improving the docs - it’s always nice when the docs match the expected behaviour, right?).

Sadly, unless we find additional funding, Tangential development is going to slow down significantly in the very near feature, as our lead developer (ok, ok, it’s obvious by the git commit logs: our only developer) is going to have to find a gig to pay the bills. You could of course help out by contributing, either code or resources.

Help us (me) help you (all)

Dispensing with the 'Royal We' for a moment…​

With this release, I am officially seeking both additional committers, and funds. It is, perhaps, early, but developing this project to this point has been incredibly rewarding. With no advertising or posts, I’m seeing a surprising amount of activity, both here on Github, and via the analytics for https://tangential-demo.firebaseapp.com/.

Creating this set of tools has been very rewarding, and I hope to make this my full time gig. I would vastly prefer to be able to do so without having to deal with Dual Licensing - not because it’s not worth what I will need to charge for it, but because I’m not shockingly greedy, and I truly enjoy knowing that my work has made other lives easier; that developers have managed to get more done than they otherwise would have, because of something I helped make.

If you stand to benefit from this work, please consider demonstrating how valuable it is to you by contributing to the project on Patreon.

Thanks

Thank you for your interest in Tangential. Don’t be shy about dropping questions or requests in the Issues.

Caio,

tangential's People

Contributors

ggranum avatar michaelmeuli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

lebsral mootech

tangential's Issues

Consuming the AsciiDoctor widget breaks e2e testing

See angular/protractor#4209 and asciidoctor/asciidoctor.js#299 for details.

== Work around
If you are using this project as a bootstrap just delete the AsciiDoctor script include from index.html and the demo project.

If you are consuming this project and not using the AsciiDoctor widget, you're good.

If you are consuming this project and ARE using the AsciiDoctor widget, then you'll have to do something sad, like commenting out the script include from index.html before running e2e tests. Obviously this means not testing that your asciidoctor content is displaying. However, the tg-asciidoctor element won't break outright if the script isn't included, so you can still test your app, just not anything rendered by the tg-asciidoctor tag.

Core: Minification prevents use of raw classnames

ng-route-utils is attempting to compare a string to a classname via componentInstance['name']. It is not possible to match on a classname if one is passed in directly from a string value, as the compiled name is not the same as the uncompiled name.

Checking this project

Sorry that I am missusing the purpose of this, but I couldnot resist and had to ask you since this structure of the project is excellent.

I started the same structure and then I ended up that I was not able to map relative paths just like @angular does it, so i search thrue the angular CLI adn I came across to your projects.

  • It builds
  • IDE recognizes the packages
    Amazing...

I am sure you spend quite of time trying to figure out this. Let me ask you was there anything particular that you had to do ?

Besides changing paths inside tsconfig.json? I assume the other tsconfig.json inside lib and each individaul package.json is just for the gulp tasks.

Thanks again and I appologize using issue to actually get some information!!!

I am on latest angular-cli which I need jsut for the demo/playgrounds, but for publising I want to use the same from material2.

-Fk

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.