Giter Club home page Giter Club logo

bustashape's People

Contributors

dependabot[bot] avatar emdem avatar rupl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

bustashape's Issues

drag mode

modifier button causes a drag to create new copies of a shape instead of just moving it. easy way to make copies.

Provide stencils to guide groups

At Vetfest a guy suggested having stencils so that a group could generate shapes to decorate the stencil. It would provide a theme of sorts to avoid the totally random creativity that goes into it when people have a blank slate.

This might be paired well with other shapes. The example mentioned was a stencil of a person with different mustaches, hats, etc. (like a digital Mr. Potato)

Single or multiplayer rooms

Some people don't want to have their stuff messed with. We should add the option to choose when creating a room.

Room list

On the login page it would be great to show the most active rooms. This would require a server-side data store which doesn't exist yet, but the socket events are very easy to listen for and count.

Communicate important network events to user

Using the tools built in to Socket.io we can offer notifications when the connection is lost or regained, and using the events we already have inside bustashape, they can be notified when others join/leave.

  • when connection is lost or timed out
  • when connection is restored
  • when someone joins your room
  • when someone leaves your room

Once these events are handled in the codebase, we can perform other smart actions like #79

Rooms as layers

this one makes my head explode, but @afragon suggested we could layer whole rooms on top of each other.

Saved rooms on the client-side

It's possible to save the live state of a room (not an SVG or raster) using SW (#28) and load it up during a future visit. Instead of just injecting into the DOM, the client-side playback could issue socket commands so that someone else could join and "catch up" to where you left off.

There's much to discuss before making this happen, so I'm just jotting this down before I forget.

Make canvas location based on GPS location!

Disable panning completely (but retain zooming) and make it based on your physical location in the world!!! People in physical groups would naturally be in the same canvas area, and can draw together without configuring.

Done properly this would be like a virtual layer of graffiti overlaid on top of a city. You can zoom out and see other works at bird's eye view. But if you want to draw shapes somewhere else, you have to walk over and draw there!

Location-aware rooms

From @mattgrill:

i wonder if you can do something with location aware drawing.

people that are physically close, can draw together.

Snap mode

Not only would it allow us to make sick pixel art, but a snap mode would help power any future LED-based displays.

Post art in gallery

add a button (Post) that saves the art into .png/.svg and post it on a public gallery.

Timeout!

Just like a public pool break time, it might be fun to enforce a moment of time where changes can't be made. Just a few minutes to admire everyone's work!

busting shapes

provide ability to break a shape into smaller pieces.

square โžก๏ธ triangle

Better color picker

I looked at Spectrum for this. It has color+alpha (meaning we could drop separate opacity setting) plus it can fallback to native color picker when it is available.

Load test the site to determine the user limit

If this thing is to be used at scale (at public events and so forth), we need to determine how much traffic a single server node can handle. Load testing is in order. I asked twitter and got a few links which I'm just dropping here to start my own discovery:

  • WebDriver + JMeter load testing using various agents, perhaps via BrowserStack?
  • websocket-bench custom tests that may be able to plug into other libs, e.g. a monkey test
  • A fleet of Phantom or Casper agents with pre-programmed scripts (might be much easier for me to use pre-existing knowledge to simulate drags this way) โ€” could definitely be combined with client-side monkey testing
  • The Twitterverse suggested loadimpact.com and prosthetic-hand, a tool to simulate gestures.

Following that discovery process, we need to safeguard the app against it. Here are the options:

  1. Limit users to a safe number below the threshold uncovered during load tests
  2. Learn how to scale the app :bowtie:
  3. Implement #11

1 is fairly easy but limits bustashape's potential. It's the short-term solution. 2 is a huge question mark that I maybe can do myself but maybe not. But hey, better to know our limits!

Service Worker

You know, the usual:

  • Enable HTTPS on bustashape.com (#88)
  • some caching
  • add to homescreen (#71)
  • manifest (#71)

Re-join room on timeout or disconnect

Currently, if you lose your connection or have any sort of network hiccup, you basically drop from the room. This doesn't have to be so fragile. The client stores the room name and can auto-join the proper room when reconnecting.

This same issue occurs when the server reboots as well. So any updates to the app currently kill all activity on the site. Sadness.

Filing as a bug because it's a subtle event which causes a major UX disruption. It took me a while to figure out what was happening during a flaky moment on my own home wifi.

Bad connection mode on clients

Sometimes people will have high-latency connections that don't work well with the stream of data. Or the physical distance might just prove to be too wide. There should be an easy way to toggle your client so it requires only a minimal amount of data to receive updates from others.

I'm thinking of marking "final" movements somehow (like when you release the shape rather than all the movements broadcasted during a drag). Combining the occasional update with CSS transitions will still provide nice interactivity without requiring 10-20ms ping.

This can be a checkbox that each client toggles when things get laggy. If a person wants to give the more real-time option a try, they can just switch modes again.

Provide intro/demo for first-timers

While I'd love to consider myself such a code-maestro that the UI needs no explanation, that's probably not the case for most folks. Luckily I saw a tool that can provide an intro automatically once descriptions are attached to various parts of the UI: http://introjs.com/

zoom to fit function

would be great as a temporary way to change view and orient yourself, or offer zoomed out view when choosing certain options

Data visualizations

Instead of being a purely human-powered tool, it might be fun to create art from a data source.

Scramble feature

so what happens if a user throw out a couple of objects and then press a button called "scramble" and they randomly mix up and align new positions? I don't know the value of it more than it could bring forth new elements which the user later can build on. I would argue that this is a late stage feature and not urgent.

Non-screen output

Could we somehow pipe the output of bustashape to other media? Like a laser projector or something wild? People would go nuts over controlling lasers. Or at least I would! ๐Ÿ˜‹

Keycode for saving

it's a super PITA to mouseover the save button and click. Since the behavior in Chrome is already auto-downloading on click, adding a S modifier would make it much easier to save on the fly.

Autofill room settings

Part of creativity is constraints. There are so many flexible settings (even with just four options!) that it can get overwhelming or even messy without some guidance to keep things on track.

It would be cool to have some presets that you choose when creating a room, and the bonus is that some or all of the controls could be completely suppressed to reduce the UI to the bare minimum.

Some random ideas:

  • pre-populate the room with some shapes. Kind of like giving people a "kit" to work with to make things. No UI needed at all. (#56)
  • hard-code the blend mode, color, opacity, shape for a room. Only the "add" button remains.
  • hard-code blend mode and restrict to a specific palette and opacity (for example using the difference blend mode and only allowing one color at full opacity is really trippy)
  • choose some initial settings like color and leave only opacity as an option that the user can change.

Embed the username into the shape's markup

It would be fun to include an author attribute on the shape. We could display the names, or even perform operations (like sorting / grouping) on shapes according to author.

You could even drop the shapes into layers per author, or restrict interacting based on this prop.

Push notification when people join a room

Once the Service Worker (#28) is in place, push notifications would be a great way to encourage real-time interaction with other folks.

I suppose you'd have to "follow" a room or something in order to opt-in for notifications. But if you leave and another person joins, you get a notification that the room has other people in it.

Intro animation on login screen

We spun this off from the branding/design task because it got too big. We want to mock up a demo, kind of like an intro in a SNES game where it plays itself in a 60-second loop.

Maybe we could log a real session and just store the data? Or just hand-code one.

Use a zoomable board, maybe canvas?

Right now we're just using position: absolute with top/left coords for positioning. Not only would CSS transforms be more GPU-friendly, but but using <canvas> or maybe even something like leaflet would be a good way to create a more robust surface for drawing that isn't so bound to the DOM/viewport.

Progressive web app

๐Ÿ”— https://medium.com/@samthor/add-to-home-screen-apps-and-their-lifecycles-9ccd05f96e71#.glqyimpg6

Although bustashape shines when connected to others, it can also be a great sketching tool on its own. Once a Service Worker is in place (#28), I'd like to make it feel a bit more like an app.

The first benefit would be the ability to fullscreen or otherwise diminish browser chrome, which takes away from drawing space and overrides event listeners sometimes when people are dragging about.

Combined with SW cache for drawings (#41), you could even save and reload drawings in a future session.

Option to enable physics collisions

Judging by many demos on its site, it appears that after #21 is finished we can use two.js to implement collision detection. So if you drag a shape around, it bumps others out of the way.

tap and hold for context menu

I showed this to a dude and he asked for the ability to delete a shape. Sometimes you want to change properties too. I think tapping and holding is the key to doing this. need to think on it a bit. Once the menu is activated we could:

  • show a little delete button, maybe just a little โŒ in the corner
  • allow the color/shape to be changed, etc

Allow cloning of shapes

Not to be confused with grouping shapes #5

I'm thinking of an organic process, not just a clone button. For instance, two people grabbing the same shape at the same time. Instead of having them battle it out, it would be cool to make a copy and have the shape be naturally cloned.

Shape presets

A possibility mentioned in #25. After observing people for a few days at vetfest, it became clear that the controls are way too open-ended for first-timers being asked to try it on the spot. Offering visual presets would be a great way to boil the UI back down to one tap. Don't even offer menu toggling, just show the shapes.

Camera as a texture

Take a photo and use it instead of a background color. Front-facing camera = avatars

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.