Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/partykit/sketch-polls
Live poll web component
https://github.com/partykit/sketch-polls
Last synced: about 6 hours ago
JSON representation
Live poll web component
- Host: GitHub
- URL: https://github.com/partykit/sketch-polls
- Owner: partykit
- License: mit
- Created: 2023-08-16T11:39:27.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-26T17:05:46.000Z (about 1 year ago)
- Last Synced: 2024-10-13T20:05:53.544Z (about 1 month ago)
- Language: TypeScript
- Homepage: https://partykit.github.io/sketch-polls/
- Size: 4.64 MB
- Stars: 19
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-stencil - sketch-polls - Live poll web component. (Components built with Stencil / Community)
- awesome-stencil - sketch-polls - Live poll web component. (Components built with Stencil / Community)
README
# sketch-polls
This web component adds a new 'poll-party' element which is used to add a live poll to any web page, given a PartyKit server to connect to.
Built using [Stencil](https://stenciljs.com/).
Check out the [live demo](https://partykit.github.io/sketch-polls/).
![image](/assets/poll-party.gif)
## Experimental!
This component was created during [Matt](https://interconnected.org)'s summer 2023 residency. The purpose is to experiment with multiplayer interactions, and simultaneously see what PartyKit can do. It's called a sketch because it's lightweight and quick, and because we learn something in making it.
## Usage
The web component allows you to create a live poll straight from HTML, from otherwise static websites. You import the component, and give it a question and some options.
![image](/assets/source.png)
You also have to provide a host. That's where your PartyKit back-end will run. See below.
The poll comes to life and looks like this:
![image](/assets/poll.png)
You can vote. It records the fact that you've voted in localStorage on your browser, and sends your option to the PartyKit server.
The results look like this:
![image](/assets/results.png)
...and they update in realtime as other people vote.
To create a new poll: change the HTML. The PartyKit server doesn't know about the question or options specifically -- it stores the votes against a hash of the poll text. So if you change the question or options, it's a new poll.
### Importing the component
The component is published [on npm as poll-party](https://www.npmjs.com/package/poll-party).
In production, add this script tag to your HTML head:
``
### The Partykit back-end
In development: use `127.0.0.1:1999` and, from this repo, run:
`npx partykit dev`
In production: use the host of your own PartyKit server (you'll be given it when you run `npx partykit deploy`) or use: `poll-party.genmon.partykit.dev`.
If you'd like to add features (e.g. poll expiry dates) start by building on the server in `partykit/polls.ts`.
## To do
- [ ] Add a mini front-end on the server to see all current polls
- [ ] The component doesn't show an error if it can't connect to PartyKit: it should, as votes won't be counted
- [ ] If the poll-party element has a `styles="false"` attribute, it should not use the default styles, and instead rely on the host page to style it## Using StencilJS
Follow these instructions to start developing a new component.
From an empty directory:
`npm init stencil` (select 'component')
The project was named 'poll-party' and then the files moved to the top-level directory.
We also use local storage, so:
`npm i stencil-store-storage`
`npm install partykit@beta partysocket@beta`
...for PartyKit.
We want to use Tailwind CSS, so use [stencil-tailwind-plugin](https://www.npmjs.com/package/stencil-tailwind-plugin).
Install:
```
npm install -D stencil-tailwind-plugin tailwindcss
npm install @stencil/sass --save-dev
tailwindcss init
```Then copy the `stencil.config.ts` from this repo, and also copy `src/styles/tailwind.css` into place (with the top three `@tailwind` lines).
Finally delete the directory `src/components/my-component` and run `stencil generate` to create a new component called `poll-party` (or whatever).
`npm run build` will create the `dist` etc directory.
During development, use `npm start` to run the test server and look at `index.html` from your `src/` directory.
Don't forget to also run `npx partykit dev` for the server.