Coder Social home page Coder Social logo

lowercasename / gathio Goto Github PK

View Code? Open in Web Editor NEW
277.0 277.0 33.0 9.47 MB

Self-destructing, shareable, no-registration event pages

License: GNU General Public License v3.0

JavaScript 85.41% CSS 0.70% Dockerfile 0.03% Shell 0.09% Handlebars 6.19% TypeScript 7.58%

gathio's People

Contributors

amwelles avatar chilledtonic avatar dariusk avatar dependabot[bot] avatar dev-nicolaos avatar kohbo avatar lowercasename avatar marklechtermann avatar palfrey avatar redneckcatholic avatar tastypi avatar visoart avatar wxcafe 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

gathio's Issues

Federation issues with Pleroma

As a follow up to #35, while #79 seems to have fixed federation with Mastodon, I can't seem to get federation with Pleroma. I'm opening this to track my debugging efforts.

Guest list erased 😲 on new user registration

This is the second event where my guest list has been mostly* erased! It happened in the past two days, when I last checked it.

* I and one other guest are still there, plus a new one. But there used to be eleven.

It seems to be related to a new user registering. The previous time it happened (late last week), a friend told me that he thought he "did something strange" on the site when trying to twister. When I checked, he was, indeed, registered, but everyone else except me had disappeared.

As you may imagine, this is quite distressing and causing me many issues with organising these events.

I'm happy to send you the links in private, if they can help with debugging.

Gath.io is down?

Hi - I can't look up the gath.io domain name.

Recent commits lead me to believe that the project isn't abandoned.
Maybe it's an expired domain name or something?

Email notifications not sent out after updates to the event

Hi,

First of all, thanks for the great project!

I've created an event and attendees confirmed their participation providing an email address, so as to receive updates. While they did receive an email confirming that their participation was registered in the system, they are not getting any notification about changes to the event.

Thanks!

Unable to create events on gath.io, 502 Bad Gateway

Hello,

As I try to create an event on gath.io, once I click on create the event, after entering all the information about the event, I get a 502 Bad Gateway error on the gath.io/newevent url.

I tried using Chromium and Firefox from my computer, and from my phone's Firefox too.

I hope you can find what's going on.

Cheers

Improve Customisation

I've set up an instance, and have noticed that the gath.io name and domain is hard coded in many places. I'm starting to work through these and replace them with values from domain.js - I'll do a proper branch so I can create a PR for this soon when I've got a better sense of the codebase.

Would it be a reasonable approach to define the metadata values used in the event and group views a lot earlier so they're available to things like the front page? It's pretty much entirely derived from the domain.js settings, so I'm thinking it'd be sensible to set up all these things in one hit at the beginning.

Is that workable or is there something else I'm not considering?

Feature request: RSVP for number of attendees

I love gathio and have been spreading the word. A family member used it for a child's birthday party and said the one thing they miss from Evite is being able to RSVP for a number of people (children and adults). That attendee counter is handy for tracking actual guest count, e.g., if someone RSVPs for a family of five then that means more pizza to order than an RSVP for one.

Would love to see this field / capability added as a feature to bring gathio into fuller feature parity. Thanks for the great product!

Feature request: repeating events

It would be nice to be able to add repeating events to an event group.

My specific use case is that I would like to move a weekly meeting on to Gath.io (from facebook),
but I don't want to (or count on myself to) actually make the event each week.

Being able to just point attendees towards a(n auto-populating) gath.io group would be really convenient.

Thanks for your work :3

Attendees can't cancel.

Once an attendee indicated they are attending they cannot later cancel.
Event organizer cannot edit attendees.

Ability to (optionally) limit who can create events?

Hosting a personal instance of gathio would make a lot more sense if you could limit who can create events. I have a rough idea of a way to do this without having to introduce user accounts:

  1. Add a config option of some sort which includes a list of "event creator" email addresses.
  2. If that option isn't specified, ignore continue as it does now. Otherwise, go to step 3.
  3. Instead of showing the normal /new/event/public page, have a form to enter your email address and request an link that lets you create an event.
  4. When that form is submitted: if the email is in the list, send a temporary link to create an event; otherwise, either show an error or pretend to succeed but don't send a link. (Also see the note below.)
  5. The link allows the user to create an event. It'd probably make sense to have the link auto-expire.

Note regarding #4: I've seen arguments that things like this should always pretend to succeed. I'm not entirely sure of the implications, so I won't try to make an argument either way. It can always be changed later on.


@lowercasename, would you be open to this functionality being added? If so, I can try to make a PR adding it. If I make a PR it'll probably be next week.

And if you're open to this kind of thing being added, lmk if you have any suggestions for a better way to approach it.

Can't register for an event

Looks like something is going on with the validation for the "how many people in your party" field. I've entered 1 into that field, and it's showing this error message:

Please enter a number between 1 and 0

I'm going to poke around the codebase and see if I can figure out what's going on.

installation documentation

Getting a step-by-step "how to install this on your own server from scratch" doc would be great. I'm disposed to write this if you want (it's a pretty short documentation too)

Feature request, browser alerts on new event comments, or new event RSVP changes

As my first issue, I'd like to start by saying your software is great. I'm very grateful that you made this, and I've enjoyed it with one event so far. I have friends irl, on facebook, on slack, irc, etc, and trying to invite all of these people to one event is difficult. The main event platforms I've seen people use are, facebook, paperless post and eventbrite. Each of these require your email/identity, and remove anonymity. Gath.io solves this, by not requiring registration, which I think is a major key feature that makes this project unique. One major downside to not registering or giving your email to the platform, is that you lose the ability to get notified. While the aforementioned platforms above sacrifice your privacy (by taking your email, keeping the records/logs of what you did) in order to notify you, I don't think these two things are mutually exclusive. Not being notified, means lower engagement. Engagement for the sake of engagement isn't good. Though when you're hosting an event (from my perspective) a major advantage is drumming up activity, to remind people of the event, if they see people they know are going, they're more likely to want to go, etc. It's not that convenient to have to keep remembering to refresh the gath.io link. ok... so to my proposal. It'd be nice if there was a way to "alert" the browser on event changes. I think making this opt-in would be reasonable, so we don't change any of the default behavior. If the organizer or attendee doesn't want to be nagged, by default they won't. If they want to see who is going and get notified of that, when they first interact with the gath.io link, they can check the option to be notified through the browser. Note, this should work without needing to send any emails. You can change the favicon the way slack does, with a red dot (the current universal notification sybol). Once you click on the tab, the red dot goes away. and, you can be notified on the fly, as say someone RSVPs for your event, libnotify will shoot a message to your browser.

Thoughts?

Debugging federation issues

I've updated to current and having issues with interacting with events via Mastodon instances (tried a few on the same event - chinwag.org, aus.social and hackers.town all the issue).

I can view the events on Mastodon fine via their address, but signature verification always fails on the follow requests when they get back to the instance. The verify function always returns false.

Is there an undocumented extra step in the setup somewhere or any hints on debugging this further?

Localization support ?

I couldn't find an option to set the UI language in Gath.io. Is it possible ? I'd like to know how to contribute to localize it in 2 other languages if/when possible.

Any way of email following/notification for new events in group event?

I was using Gath.io recently and came to a conclusion it would be great to have an option for subscribing to an event group. This way people could send an email address (on the event group) to follow group automatically and get emails about new events.
This feature would keep people in touch with new events.

Use longer event identifiers

Event random identifiers should perhaps be longer to make it impossible to bruteforce identifiers en masse, which an attacker could do to harvest users’ addresses over time.

Don't crop cover image

Why should we mimic proprietary networks with enforcing a single cover image size for all people? Let folks use whatever image size they want as long as it doesn't exceed certain file size (1mb)? If it looks ugly, the users themselves will adapt it if they will feel a need.

Allowing multiple date choices

Something like what Doodle does where you can suggest multiple dates/times for an event, and people can vote on which ones are best for them, would be great!

Crash on .avif Cover Photos

When I try to attach this cover photo (note: I've renamed its extension to convince GitHub to accept it, but it's actually an AVIF file) I get

/srv/gathio/gathio/routes.js:676
        .resize(920, Jimp.AUTO) // resize
         ^
TypeError: Cannot read properties of undefined (reading 'resize')
    at Jimp.<anonymous> (/srv/gathio/gathio/routes.js:676:10)
    at Timeout._onTimeout (/srv/gathio/gathio/node_modules/@jimp/core/dist/index.js:264:25)
    at listOnTimeout (node:internal/timers:568:17)
    at process.processTimers (node:internal/timers:511:7)
Node.js v19.5.0
[nodemon] app crashed - waiting for file changes before starting...

I'm running

gathio@public:~/gathio$ git show HEAD
commit 8627537af32c8e88fa8bdfe224b92621c7e2df5c (HEAD -> master, origin/master, origin/HEAD)
Merge: e93b23d d39734b
Author: Raphael <[email protected]>
Date:   Wed Dec 28 16:38:57 2022 +0000

    Merge pull request #85 from redneckcatholic/fix-event-deletion
    
    Fix event deletion

and

gathio@public:~/gathio$ npm version
{
  gathio: '1.2.3',
  npm: '9.3.1',
  node: '19.5.0',
  v8: '10.8.168.25-node.11',
  uv: '1.44.2',
  zlib: '1.2.13',
  brotli: '1.0.9',
  ares: '1.18.1',
  modules: '111',
  nghttp2: '1.51.0',
  napi: '8',
  llhttp: '8.1.0',
  uvwasi: '0.0.14',
  acorn: '8.8.1',
  simdutf: '3.1.0',
  undici: '5.14.0',
  openssl: '3.0.7+quic',
  cldr: '42.0',
  icu: '72.1',
  tz: '2022g',
  unicode: '15.0',
  ngtcp2: '0.8.1',
  nghttp3: '0.7.0'
}

This takes the whole site down, sadly. I have to ssh [email protected] systemctl restart gathio to get it back.

Use a library to escape HTML

The htmlEscapeToText() function in routes.js should probably be replaced with a library, since there are often tricky edge cases. I recommend ent and will probably make a pull request with this soon.

Deleting events returns 404

Deleting events returns a 404 page and the event is not actually deleted.

I believe it is because the following form action does not match the URL pattern of the route (it doesn't include the editToken in the URL):

<form id="deleteEventForm" action="/deleteevent/{{eventData.id}}" method="post">

gathio/routes.js

Line 1240 in e93b23d

router.post('/deleteevent/:eventID/:editToken', (req, res) => {

I am running with isFederated = false.

RFE : make email optional for participants

The email address should not be required when indicating attendance.
This would make it easier for organizers to have an idea of how many people attend without having any identifiable information.

Longer names are cut off

Screenshot below. This could be fixed pretty easily by making the attendees a simple bulleted list, rather than having them show up in a circle. I may take a stab at it if I can figure out how to get gathio running locally. :)

Store Tokens Locally to Improve Usability

Hi, in before: Sorry for the lengthy issue, and again thanks for this project.
This started out from #51 though I feel it distances itself too far from the original idea. It also branched into #61.

I like the idea of using localStorage to store the private tokens to increase usability. The idea could also work with cookies, depending on how much of the work you want to do on the serverside and on the clientside. I feel that localStorage is more privacy-focused.

Edit Tokens (Events/Groups)

If edit tokens are stored, you can display a button on the relevant page to enable editing. When clicking the button it:

  1. checks if you have the editing code in localStorage (the button might also have a different style in this case)
  2. if not, asks you for the token (this could enable password managers)

Then it simply redirects you to the same page with the token applied to the URL. If it was correct, you can edit the page. If not, and the token was taken from localStorage, it is removed from local storage.

Ideas on Implementation

When an edit token is present and is valid: Include JS for the client to put this token into local storage. Use case: I can send you a link to my edit page and you automatically store the token

When an edit token is present and is invalid: Include JS for the client to remove this token from local storage (if exactly present): Any invalid tokens are removed (however they got there). It is important to only remove the exact token. Otherwise, I could send you a link with an invalid token and your correct token would be deleted.

Group Tokens

When creating a new event and group tokens are stored locally, a drop-down could be displayed to automatically apply the group tokens with all the tokens you have stored locally. This way you don't have to copy+paste them manually.

RSVP Tokens (Deletion Password)

When viewing an event you would not need to remember the password you got shown only once.

When a deletion password is present locally, the "Remove me" button would use this password and remove it from local storage.
You could also gray out the "Add me" button and replace it with: "Add another person" or remove it if you do not want this use case.

It would also be nice to be able to see for which user name(s) you have a deletion token locally. However this would require tokens to be bound to the user id (also stored locally with the deletion token(s)), and the user id would need to visible on the page. From a privacy standpoint, I think it would be okay if each user/RSVP gets an id that is unique for the event.
For example, counting the ids from 0 and also counting removed users. I.e. user 2 deregisters, I register and am assigned id=3. This way user 2 does not think they are still registered and displays the correct buttons.


These are just some ideas I had. It might make sense to split them into multiple issues to track/discuss them more easily. However, they are based on the same base idea, hence I put them into a single issue.

Unable to run using Docker

Environment

  • Fedora Linux 38 (Workstation Edition)
  • Docker Desktop v4.21.0

Steps to Reproduce

Expected Behavior

Gathio starts successfully and is available on http://localhost:3000

Actual Behavior

The mongo container runs starts successfully, but the gathio container stops almost immediately after starting. Using docker desktop to inspect the logs for the gathio container reveals the following error:

 > [email protected] start /app
2023-07-23 08:56:19 > node dist/start.js
2023-07-23 08:56:19 
2023-07-23 08:56:19 node:internal/modules/cjs/loader:1080
2023-07-23 08:56:19   throw err;
2023-07-23 08:56:19   ^
2023-07-23 08:56:19 
2023-07-23 08:56:19 Error: Cannot find module '/app/dist/start.js'
2023-07-23 08:56:19     at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
2023-07-23 08:56:19     at Module._load (node:internal/modules/cjs/loader:922:27)
2023-07-23 08:56:19     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
2023-07-23 08:56:19     at node:internal/main/run_main_module:23:47 {
2023-07-23 08:56:19   code: 'MODULE_NOT_FOUND',
2023-07-23 08:56:19   requireStack: []
2023-07-23 08:56:19 }
2023-07-23 08:56:19 
2023-07-23 08:56:19 Node.js v18.17.0
2023-07-23 08:56:19  ELIFECYCLE  Command failed with exit code 1.

Notes

It may also be helpful to add a note in the docker installation docs for those like me who don't use docker all the time that docker needs to be started before running the docker-compose ... command. If you try to run it before that you get this big cryptic error about python not being able to find some file or directory.

Send Deletion Password to User Email

Hi,
first of all (as in most of the issues) nice project :)

Is there a reason the RSVP deletion password is not included in the "You're RSVPed to" E-Mail? If it was included

  • People who supply an E-Mail do not have to remember the password (you could also include a link in the E-Mail. However, this link should require a second confirmation of removal, as users might tend to click on any link they see)
  • People who got signed up wrongly can deregister themselves from the E-Mail notifications

"Database error, please try again" when creating new event

Hi! I tried to create a new event on gath.io and after filling out all the info, uploading a picture, etc. I got the error message:

Database error, please try again :( - MongoError: server instance pool was destroyed

Any idea what might be causing that? Thanks for any help you can provide!

IndieWeb compatible events and RSVPs?

Considering gathio's compatability with the Fediverse, it seems natural to include indieweb compatibility as well.

Adding h-event microformats markup to event.handlebars would allow gathio events to be parsable in personal readers, and would make rendering the information on people's personal blogs automateable.

http://microformats.org/wiki/h-event
https://indieweb.org/event

This would be incredible as a first step, but the next step would be being able to recieve and parse webmentions:

https://indieweb.org/rsvps
https://indieweb.org/rsvp

Which would allow people to rsvp for events from their own blog. The first half I'd be happy to contribute if there's interest from project maintainers, but the second would require some discussion of how gathio handles rsvp's from the fediverse, etc, to make webmentions a possibility.

Food for thought.

Add accessible names for comment form fields

Currently, the <input> and <textarea> elements in the event discussion section do not have accessible names, instead relying on the browser to fallback to the placeholder text. This is generally considered bad practice as the text disappears once the user begins typing and the web platform provides dedicated ways to give a form field an accessible name (<label>, aria-label or aria-labelledby).

I can submit a PR to address this if it would be accepted. I'd add a <label> for each unless there is a strong objection to visual labels from the maintainer, in which case aria-label would be better than nothing. Visual labels are preferred from an A11y standpoint (see Rule 2 on the link above).

One other small UX thing (I can submit a second issue for this if its preferred): IMHO it'd make for sense for the comment's placeholder to say "What would you like to say?" rather than "What would you like to ask?" since there isn't any reason the user's comment has to be a question.

No Mastodon DM after following event account

Greetings, after making an event and sending the account name for folks to search for on mastodon and follow it they never got a DM with a poll link, is this still the method of RSVPing on mastodon?

ActivityPub code might be preventing old events from being deleted

I've discovered that some old events aren't being deleted on gath.io. I made some very quick bug testing and I think that it might be to do with an error emitted when the server tries to JSON parse the ActivityPub fields of an event without ActivityPub fields. I can look into it, unless @dariusk you have some spare time to poke around at the auto-deleter code? I know you wrote that extra section so you might have a very easy solution.

Make email optional when creating events

Hi!

I really like the project :)

Forcing people to put in an email address when creating an event does not make sense to me. I've been playing around with using gath.io to create little meeting times for friends. For these types of events, it's not that important to me to get notifications .

Thus, every time I create an event, I have to put in a fake email. (Which probably is extra cruft unneeded for yr backend.)

Consider instead making the email optional, like the already existing functionality when participating in an event.

Thank you all for creating this project! 🖤

Ability to add an RSVP/spot limit

Hi, it’d be really cool if gath.io supported a guest limit for events - like, only letting the first 10 people to RSVP or whatever. I sometimes have gatherings where there’s only room for so many people and it’s difficult to manage people who are waffling/indecisive and then end up showing up at the last minute despite me saying there’s no room for them anymore or whatever.

Having the “5 spots remaining!” indicator would also be a great motivator to get people to actually decide instead of waiting until the last minute. :)

Additional mail options alongside Sendgrid?

I’d like to hear some thoughts on how to best set up emails, especially for locally hosted instances of gathio. There are a number of issues with Sendgrid:

  • It’s paid-for (I’m currently using a free account limited to 100 API calls a day which means that if gathio becomes more popular I’d have to use something else)
  • The templates I’m using are locked up in Sendgrid and can’t be accessed or modified by people using gathio locally
  • It’s gathio’s only external API dependency, which just seems not totally necessary.

I think it would make sense to set up an optional/default nodemailer route which will use a mail server of the user’s choice, but I’d like to hear thoughts or alternatives!

Also, since I think it makes sense to keep Sendgrid as an option for people without access to a mail server, does anyone know a way to put the Sendgrid templates I’m using on GitHub?

Provide tagged releases

Hey ☺️ I'm trying to package gathio for YunoHost, but it requires downloading a zip or tar.gz and validating towards a checksum. The only way for me to do this right now is to download https://github.com/lowercasename/gathio/archive/master.tar.gz, those checksum is going to change, and thus break installations, with every commit.

Would you consider providing tagged releases so packaging gathio is less of a hassle? 😇

MongoError: E11000

On create of second event, submit returns:

Database error, please try again :( - MongoError: E11000 duplicate key error collection: gathio.events index: attendees.removalPassword_1 dup key: { attendees.removalPassword: null }

Occurring in multiple environments. Tried Docker. Tried native install on Ubuntu 22.04 LTS.

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.