mylittletony / ct-frontend Goto Github PK
View Code? Open in Web Editor NEWFrontend Demo for Cucumber Tony API
Home Page: https://www.cucumberwifi.io
License: MIT License
Frontend Demo for Cucumber Tony API
Home Page: https://www.cucumberwifi.io
License: MIT License
Looks like the SNR values are filled in with 0s if there's no data present. I think this is technically OK but visually it doesn't look right.
Whist testing triggers for basic box up/box down alerts, found a number of issues with dynamic variables:
Here is a screen shot of a trigger, email body definition & resulting email
The upgrade firmware icon is missing from the devices#show page, even though I can see an upgrade is available in the old interface.
Should appear at the top.
I just changed the development mode of the device in question from production to beta which may affect it since I've seen it before.
In the list of clients, the device description / slug is missing.
Also, the device name is being overwritten by the pubsub request.
The devices page should be subscribed to receive streaming updates from CT.
Currently the device#show page is subscribed.
The events page should have a filter at the top, as per old CT.
"For general network management, I think splitting the audit & network events would be useful, as they are used for different work-flows typically"
Think we can seriously do better than a drop-down.
We could look at adding a event-level to them also which could help. And make sure they're tightly integrated with the triggers....
Device hits 90% CPU for n minutes --> fires trigger to IFTT --> IFTT texts your mom, asks her to stop watching illegal movies
.Visit the splash page > click design.
A red button appears bottom right. This does not work until the page has been reloaded.
And as such that is rather an issue with grunt-node-inspector.
On Mac OS X 10.11.5 El Capition, Node.JS 4.4.3, npm 2.15.2, Xcode 7.3.1, xcode-select version 2343, "npm install" fails with a compiler error (see below).
Workaround: npm uninstall --save-dev grunt-node-inspector
(ignore the error message, when uninstalling).
The problem occurs because npm tries to compile some debugging stuff because there is no prebuilt binary available.
The output of "npm install" is following below:
npm WARN package.json Dependency 'urijs' exists in both dependencies and devDependencies, using 'urijs@^1.17.1' from dependencies
[email protected] preinstall /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug
[email protected] preinstall /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-profiler
[email protected] install /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/ws
(node-gyp rebuild 2> builderror.log) || (exit 0)
[email protected] install /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug
node-pre-gyp install --fallback-to-build
node-pre-gyp ERR! Tried to download: https://node-inspector.s3.amazonaws.com/debug/v0.4.6/node-v46-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for [email protected] and [email protected] (node-v46 ABI) (falling back to source compile with node-gyp)
CXX(target) Release/obj.target/debug/src/debug.o
In file included from ../src/debug.cc:2:
../node_modules/nan/nan.h:261:25: error: redefinition of '_NanEnsureLocal'
NAN_INLINE v8::Local NanEnsureLocal(v8::Local val) {
^
../node_modules/nan/nan.h:256:25: note: previous definition is here
NAN_INLINE v8::Local NanEnsureLocal(v8::Handle val) {
^
../node_modules/nan/nan.h:661:13: error: no member named 'smalloc' in namespace
'node'
, node::smalloc::FreeCallback callback
~~~~~~^
../node_modules/nan/nan.h:672:12: error: no matching function for call to 'New'
return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
^~~~~~~~~~~~~~~~~
/Users/guido/.node-gyp/4.4.3/include/node/node_buffer.h:31:40: note: candidate
function not viable: no known conversion from 'uint32_t'
(aka 'unsigned int') to 'enum encoding' for 3rd argument
NODE_EXTERN v8::MaybeLocalv8::Object New(v8::Isolate* isolate,
^
/Users/guido/.node-gyp/4.4.3/include/node/node_buffer.h:43:40: note: candidate
function not viable: 2nd argument ('const char ') would lose const
qualifier
NODE_EXTERN v8::MaybeLocalv8::Object New(v8::Isolate isolate,
^
/Users/guido/.node-gyp/4.4.3/include/node/node_buffer.h:28:40: note: candidate
function not viable: requires 2 arguments, but 3 were provided
NODE_EXTERN v8::MaybeLocalv8::Object New(v8::Isolate* isolate, size_t length);
^
/Users/guido/.node-gyp/4.4.3/include/node/node_buffer.h:36:40: note: candidate
function not viable: requires 5 arguments, but 3 were provided
NODE_EXTERN v8::MaybeLocalv8::Object New(v8::Isolate* isolate,
^
In file included from ../src/debug.cc:2:
../node_modules/nan/nan.h:676:12: error: no viable conversion from returned
value of type 'v8::MaybeLocalv8::Object' to function return type
'v8::Localv8::Object'
return node::Buffer::New(v8::Isolate::GetCurrent(), size);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:210:7: note: candidate
constructor (the implicit copy constructor) not viable: no known
conversion from 'v8::MaybeLocalv8::Object' to 'const
v8::Localv8::Object &' for 1st argument
class Local {
^
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:210:7: note: candidate
constructor (the implicit move constructor) not viable: no known
conversion from 'v8::MaybeLocalv8::Object' to 'v8::Localv8::Object &&'
for 1st argument
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:214:13: note: candidate template
ignored: could not match 'Local' against 'MaybeLocal'
V8_INLINE Local(Local that)
^
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:326:13: note: candidate template
ignored: could not match 'S ' against 'v8::MaybeLocalv8::Object'
V8_INLINE Local(S that)
^
In file included from ../src/debug.cc:2:
../node_modules/nan/nan.h:683:26: error: no member named 'Use' in namespace
'node::Buffer'
return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
~~~~~~~~~~~~~~^
../src/debug.cc:194:25: warning: ISO C++11 does not allow conversion from string
literal to 'char *' [-Wwritable-strings]
result_type = "";
^
In file included from ../src/debug.cc:2:
In file included from ../node_modules/nan/nan.h:24:
In file included from /Users/guido/.node-gyp/4.4.3/include/node/node.h:42:
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:221:5: error: assigning to
'v8::Primitive *volatile' from incompatible type 'v8::Value *'
TYPE_CHECK(T, S);
^~~~~~~~~~~~~~~~
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:180:37: note: expanded from macro
'TYPE_CHECK'
(static_cast<T volatile>(0)) = static_cast<S>(0);
^ ~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:414:12: note: in instantiation of function template
specialization 'v8::Localv8::Primitive::Localv8::Value' requested here
return NanEscapeScope(NanNew(v8::Undefined(v8::Isolate::GetCurrent())));
^
../node_modules/nan/nan.h:398:30: note: expanded from macro 'NanEscapeScope'
^
In file included from ../src/debug.cc:2:
In file included from ../node_modules/nan/nan.h:24:
In file included from /Users/guido/.node-gyp/4.4.3/include/node/node.h:42:
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:221:5: error: assigning to
'v8::Boolean volatile' from incompatible type 'v8::Value *'
TYPE_CHECK(T, S);
^~~~~~~~~~~~~~~~
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:180:37: note: expanded from macro
'TYPE_CHECK'
*(static_cast<T volatile_>(0)) = static_cast<S_>(0);
^ ~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:424:12: note: in instantiation of function template
specialization 'v8::Localv8::Boolean::Localv8::Value' requested here
return NanEscapeScope(NanNew(v8::True(v8::Isolate::GetCurrent())));
^
../node_modules/nan/nan.h:398:30: note: expanded from macro 'NanEscapeScope'
^
In file included from ../src/debug.cc:2:
In file included from ../node_modules/nan/nan.h:24:
In file included from /Users/guido/.node-gyp/4.4.3/include/node/node.h:42:
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:221:5: error: assigning to
'v8::Function volatile' from incompatible type 'v8::Value *'
TYPE_CHECK(T, S);
^~~~~~~~~~~~~~~~
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:180:37: note: expanded from macro
'TYPE_CHECK'
*(static_cast<T volatile_>(0)) = static_cast<S_>(0);
^ ~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:1514:12: note: in instantiation of function template
specialization 'v8::Localv8::Function::Localv8::Value' requested here
return NanEscapeScope(NanNew(handle)->Get(kCallbackIndex)
^
../node_modules/nan/nan.h:398:30: note: expanded from macro 'NanEscapeScope'
^
In file included from ../src/debug.cc:2:
In file included from ../node_modules/nan/nan.h:24:
In file included from /Users/guido/.node-gyp/4.4.3/include/node/node.h:42:
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:221:5: error: assigning to
'v8::Object volatile' from incompatible type 'v8::Value *'
TYPE_CHECK(T, S);
^~~~~~~~~~~~~~~~
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:180:37: note: expanded from macro
'TYPE_CHECK'
*(static_cast<T volatile_>(0)) = static_cast<S_>(0);
^ ~~~~~~~~~~~~~~~~~~
../node_modules/nan/nan.h:1632:12: note: in instantiation of function template
specialization 'v8::Localv8::Object::Localv8::Value' requested here
return NanEscapeScope(handle->Get(NanNew(key)).Asv8::Object());
^
../node_modules/nan/nan.h:398:30: note: expanded from macro 'NanEscapeScope'
^
In file included from ../src/debug.cc:2:
In file included from ../node_modules/nan/nan.h:24:
In file included from /Users/guido/.node-gyp/4.4.3/include/node/node.h:42:
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:221:5: error: assigning to
'v8::String volatile' from incompatible type 'v8::Value *'
TYPE_CHECK(T, S);
^~~~~~~~~~~~~~~~
/Users/guido/.node-gyp/4.4.3/include/node/v8.h:180:37: note: expanded from macro
'TYPE_CHECK'
*(static_cast<T volatile_>(0)) = static_cast<S_>(0);
^ ~~~~~~~~~~~~~~~~~~
../src/debug.cc:168:18: note: in instantiation of function template
specialization 'v8::Localv8::String::Localv8::Value' requested here
return NanEscapeScope(value->ToString());
^
../node_modules/nan/nan.h:398:30: note: expanded from macro 'NanEscapeScope'
^
1 warning and 10 errors generated.
make: *** [Release/obj.target/debug/src/debug.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: make
failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/opt/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Darwin 15.5.0
gyp ERR! command "/opt/local/bin/node" "/opt/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.6/node-v46-darwin-x64/debug.node" "--module_name=debug" "--module_path=/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.6/node-v46-darwin-x64"
gyp ERR! cwd /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug
gyp ERR! node -v v4.4.3
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute '/opt/local/bin/node /opt/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.6/node-v46-darwin-x64/debug.node --module_name=debug --module_path=/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.6/node-v46-darwin-x64' (1)
node-pre-gyp ERR! stack at ChildProcess. (/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack at emitTwo (events.js:87:13)
node-pre-gyp ERR! stack at ChildProcess.emit (events.js:172:7)
node-pre-gyp ERR! stack at maybeClose (internal/child_process.js:827:16)
node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
node-pre-gyp ERR! System Darwin 15.5.0
node-pre-gyp ERR! command "/opt/local/bin/node" "/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug
node-pre-gyp ERR! node -v v4.4.3
node-pre-gyp ERR! node-pre-gyp -v v0.6.28
node-pre-gyp ERR! not ok
Failed to execute '/opt/local/bin/node /opt/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.6/node-v46-darwin-x64/debug.node --module_name=debug --module_path=/Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.6/node-v46-darwin-x64' (1)
[email protected] install /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-profiler
node-pre-gyp install --fallback-to-build
node-pre-gyp ERR! Tried to download: https://node-inspector.s3.amazonaws.com/profiler/v5.2.12/node-v46-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for [email protected] and [email protected] (node-v46 ABI) (falling back to source compile with node-gyp)
CXX(target) Release/obj.target/profiler/src/profiler.o
CXX(target) Release/obj.target/profiler/src/cpu_profiler.o
CXX(target) Release/obj.target/profiler/src/cpu_profile.o
CXX(target) Release/obj.target/profiler/src/cpu_profile_node.o
CXX(target) Release/obj.target/profiler/src/heap_profiler.o
CXX(target) Release/obj.target/profiler/src/heap_snapshot.o
CXX(target) Release/obj.target/profiler/src/heap_output_stream.o
CXX(target) Release/obj.target/profiler/src/heap_graph_node.o
CXX(target) Release/obj.target/profiler/src/heap_graph_edge.o
SOLINK_MODULE(target) Release/profiler.node
COPY /Users/guido/devolo/cucumber-frontend/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-profiler/build/profiler/v5.2.12/node-v46-darwin-x64/profiler.node
TOUCH Release/obj.target/action_after_build.stamp
npm ERR! Darwin 15.5.0
npm ERR! argv "/opt/local/bin/node" "/opt/local/bin/npm" "install"
npm ERR! node v4.4.3
npm ERR! npm v2.15.2
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: node-pre-gyp install --fallback-to-build
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-pre-gyp install --fallback-to-build'.
npm ERR! This is most likely a problem with the v8-debug package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-pre-gyp install --fallback-to-build
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs v8-debug
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!
npm ERR! npm owner ls v8-debug
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /Users/guido/devolo/cucumber-frontend/npm-debug.log
guido@macbook:/devolo/cucumber-frontend $ npm uninstall --save-dev grunt-node-inspector/devolo/cucumber-frontend $ vi Gruntfile.js
npm WARN uninstall not installed in /Users/guido/devolo/cucumber-frontend/node_modules: "grunt-node-inspector"
guido@macbook:
guido@macbook:/devolo/cucumber-frontend $ vi package.json/devolo/cucumber-frontend $ vi package.json
guido@macbook:
guido@macbook:/devolo/cucumber-frontend $ ls -l/devolo/cucumber-frontend $ git checkout npm-debug.log
total 144
-rw-r--r-- 1 guido staff 1444 Jun 8 08:11 CONTRIBUTING.md
-rw-r--r-- 1 guido staff 19024 Jun 8 08:12 Gruntfile.js
-rw-r--r-- 1 guido staff 19024 Jun 8 08:11 Gruntfile.js.default
-rw-r--r-- 1 guido staff 24 Jun 8 08:11 Procfile
-rw-r--r-- 1 guido staff 3396 Jun 8 08:11 README.md
-rw-r--r-- 1 guido staff 1130 Jun 8 08:11 bower.json
-rw-r--r-- 1 guido staff 531 Jun 8 08:11 circle.yml
drwxr-xr-x 11 guido staff 374 Jun 8 11:32 client
drwxr-xr-x 3 guido staff 102 Jun 8 08:18 css
drwxr-xr-x 3 guido staff 102 Jun 8 08:11 e2e
-rw-r--r-- 1 guido staff 3594 Jun 8 08:11 karma.conf.js
drwxr-xr-x 76 guido staff 2584 Jun 8 12:18 node_modules
-rw-r--r-- 1 guido staff 2853 Jun 8 12:19 package.json
-rw-r--r-- 1 guido staff 1598 Jun 8 08:11 protractor.conf.js
drwxr-xr-x 11 guido staff 374 Jun 8 08:19 server
drwxr-xr-x 3 guido staff 102 Jun 8 08:11 test
guido@macbook:
guido@macbook:/devolo/cucumber-frontend $/devolo/cucumber-frontend $
guido@macbook:
guido@macbook:/devolo/cucumber-frontend $ ls/devolo/cucumber-frontend $ cat npm-debug.log
CONTRIBUTING.md circle.yml npm-debug.log
Gruntfile.js client package.json
Gruntfile.js.default css protractor.conf.js
Procfile e2e server
README.md karma.conf.js test
bower.json node_modules
guido@macbook:
0 info it worked if it ends with ok
1 verbose cli [ 'node', '/usr/local/bin/npm', 'start' ]
2 info using [email protected]
3 info using [email protected]
4 verbose node symlink /usr/local/bin/node
5 verbose run-script [ 'prestart', 'start', 'poststart' ]
6 info prestart [email protected]
7 info start [email protected]
8 verbose unsafe-perm in lifecycle true
9 info [email protected] Failed to exec start script
10 verbose stack Error: [email protected] start: node server/app.js
10 verbose stack Exit status 1
10 verbose stack at EventEmitter. (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:213:16)
10 verbose stack at EventEmitter.emit (events.js:110:17)
10 verbose stack at ChildProcess. (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:24:14)
10 verbose stack at ChildProcess.emit (events.js:110:17)
10 verbose stack at maybeClose (child_process.js:1015:16)
10 verbose stack at Process.ChildProcess._handle.onexit (child_process.js:1087:5)
11 verbose pkgid [email protected]
12 verbose cwd /Users/simonmorley/Documents/Code/nodejs/ct-angular
13 error Darwin 15.3.0
14 error argv "node" "/usr/local/bin/npm" "start"
15 error node v0.12.4
16 error npm v2.10.1
17 error code ELIFECYCLE
18 error [email protected] start: node server/app.js
18 error Exit status 1
19 error Failed at the [email protected] start script 'node server/app.js'.
19 error This is most likely a problem with the my-new-project package,
19 error not with npm itself.
19 error Tell the author that this fails on your system:
19 error node server/app.js
19 error You can get their info via:
19 error npm owner ls my-new-project
19 error There is likely additional logging output above.
20 verbose exit [ 1, true ]
The navigation still appears when not logged in.
On the user's invoices page, there is an email icon at the top. Clicking this emails the selected invoices t the billing contacts.
This needs to be made more clear to the end-user...
Very occasionally, I'm noticing the login is looping.
I'm sent to the auth servers > login > returned to CT with the token. And logged in.
Home page loads but there's 401 so my session is cleared. And I'm sent back to the beginning. The only way to clear is to wipe the cookies and all other associated data.
Currently the events are categories into types and objects. For example, box && box.create.
We should implement a log level to each one so the EU can filter further. And, as per the suggestion for a new menu bar, they could appear in the top menu.
box.create - 1
box.online - 3
box.offline - 3
We're missing a prominent notification banner that displays whether a location is archived or not.
In the current CT, we use a pink bar at the top.
The client whitelists AKA walled gardens section is currently missing.
Needs to be added to the networks / separate section.
Waiting decision internally re. same.
On the zones page, you should be able to select multiple checkboxes.
This used to be possible, looks like an update to the md-table library broke something.
TBC ---> Missing the whole section relating to tabular reports.
The support button, top right hand corner, should open the support widget. This stopped functioning recently.
An event indicating APs that have a high number of clients would be very useful to indicate APs that are in danger of becoming over-loaded.
Ideally this would be a configurable threshold per location.
The threshold would be a threshold of associated clients (e.g. event generated if an AP has more than 30 clients associated).
Currently you can add / invite a user but it's impossible to remove.
The error message suggests the location-id is missing.
We're currently re-writing the invites API which will address.
We're still missing the whole developer section.
Needs to be updated to material design and rolled out.
It's not easy to navigate through the reports at the moment.
In particular, the drop down select isn't useful. It only allows for a few locations.
The search button is OK but too subtle - when you search for a location, if it's not in the select list, the location is displayed incorrectly.
The tooltip has no formatting on the values.
Some of the cards fail to load.
I've forgotten the downloads section when migrating to the OS repo.
Payloads run fine from the individual devices page but not from the location > devices page.
It looks like the request is sent but is missing a parameter for the API.
Please see attached image files with annotations
This is a subjective opinion, but I like to use top-level nav buttons for common workflow launch points. It;s also useful to have a summary of minor/major/critical issues.
I've done a very bad mock-up of a suggested use of the top-bar (see image below). Feel free to completely ignore as appropriate :)
Currently the tx and rxbps a snapshot of what's happening 'now'. As seen in the client's list.
We need to adjust this so they use a rolling average from the backend. The snapshot wasn't accurate previously.
The home page / dashboard currently has a banner at the top with a search bar.
Buttons to add a new location / add a box should be present in there. It would also be nice to have a link to the locations list, since we're relying on the user to find the link in the card.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.