Code Monkey home page Code Monkey logo

gospeak's Introduction

Gospeak

CircleCI Codacy Badge Codacy Badge

Social links: @gospeak_io

Finally an app to help meetup (or small conference) orgas and speaker to fulfill their goal.

On the organizer side, they can create a group (like a meetup group) and then manage their events, CFPs and even sponsors. Gospeak can publish a nice group page with the group details and history (events, talks, sponsors...).

On the speaker side, they can create some talks and submit them to existing CFPs in the platform in a few clicks. They can keep track of all their proposals and publish a nice page about them, containing their speaker history and their current talks.

Organizers can look at public talks and ask to the speaker for a proposal, this can be a very nice opportunity for groups to find speakers but also for speakers to have more opportunities.

Finally, Gospeak will also gather a list of external CFPs (like big conferences) so speakers can find them easily.

We really believe that public speaking is an awesome experience and we hope more and more people will do it. One of the Gospeak goal is to help everybody try public speaking and help them in the way.

If you have any idea or suggestion about that, we will be happy to discuss it with you, feel free to reach us at [email protected] or @gospeak_io

Dev

Getting started

  • install a scala environment
    • jdk 8
    • sbt
    • scala (intellij)
  • clone the repo
  • launch sbt run
  • open http://localhost:9000

If you enconter a Metaspace error, try to give sbt more memory using: sbt -mem 2048 run

Troubleshooting

  • run coverage: sbt clean coverage test coverageReport coverageAggregate && xdg-open target/scala-2.12/scoverage-report/index.html

Notes

gospeak's People

Contributors

afakir avatar baddoub avatar gtof avatar loicknuchel avatar mlachkar avatar pedrorijo91 avatar rlavancier avatar sbouaked avatar scala-steward avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

gospeak's Issues

Create an upload image widget

Every displayed image on gospeak should come from our own image storage.

So, instead of just saving the image link, we should fetch it, upload it and save the gospeak link of the image along with source info (ex: initial image url).

The image widget may support several sources of images:

  • from an url (should save the source url also)
  • a local file in the computer (should save the image name)
  • unsplash.com
  • twitter avatar or background image (from a twitter username)

Optionally, it could handle some constraints on minimum image size (in px for width or height) and aspect ratio of the image (square, 16:9...).
It's a bonus if it can crop/resize the original image ^^

Create an upload file widget

Speakers should add their slides to their talks and proposals.

This widget should support:

  • already hosted slides (google slides, slideshare, slides.com, reveal...)
  • local files (from computer) in various formats (pdf, ppt, keynote, html...)

Add a dynamic popover when hovering important entities

Like github with users or issues, it could be really nice to have a rich popover showing some details about the hovering entity.

In gospeak, interesing entities are:

  • User
  • Group
  • Event
  • CFP
  • Partner
  • Venue
  • Sponsor pack
  • Talk
  • Proposal

When hovering one, a JS script could fetch the popover and display it

Improve way of storing user lists

Groups, events, talks and proposals have a list of users linked (orgas, talks or speakers). The current way of doing this is quite ugly: we concatenate all ids with a ',' and save them to a string column.

We should investigate ways of keeping the foreign key on them, maybe using the postgres array type, or maybe using a join table. But this probably require a lot of query rewrites :(

Users can join a group

Any user should be able to join a group to become a member of it.

It should do it from the group page, and login/signup should be proposed after clicking on join button (like CFP submission)

A group can have a lot of members, so this should be done through a join table keeping the join date

Meetup integration

  • Add config section in group to setup meetup (auth keys & feature selection)
  • Allow to create a draft on meetup with title, description (generated from template), venue and date
  • Fix date timezone (currently took timezone of the venue but it does no seem enough)
  • Fix description format: use dedicated description or do a Markdown -> Meetup-Html ^^
  • Once published, allow to update it: every time the event is updated in gospeak or on-demand

Nice to have:

  • Add optional "how to find us" on venue so it can be published on meetup (venue access details)
  • Add optional "leading picture" on event so it can be published on meetup
  • Once event is created, display status (draft/published) and number of attendees

Add Event max attendee

An event should have a max number of attendee to be able to close inscriptions or create a waiting list

Rework CFP management

We need more flexibility in CFPs to allow meetups & conferences to use it.
Here are the key points:

  • a Group can create as many CFPs as he wants
  • a CFP may have an end date or not
  • a CFP may be defined as default so it will be selected by default when creating Events
  • an Event can be attached to a CFP, so CFP proposals will be visible on the Event page

Manage external CFPs

It would be nice if gospeak can be used as a CFP reference. Obviously it displays gospeak CFPs but many conferences or meetups will not use gospeak. So we should be able to add an external CFP with minimal infos: name, url, location, start/end dates, event date, event logo, tags...

Theses CFPs should be created/modified by anybody logged to have the maximum of them. So a modification history should be kept.

Lock proposal edit for speakers under some circonstances

Proposals are considered the property of the group. Speakers could edit them but not always:

  • orgas can manually disable speaker edition
  • speaker edition is locked after proposal rejection
  • speaker edition is locked after the event they belong to is past (if it exists)
  • (to be validated) speaker edition is locked after proposal is accepter to an event

Add featured flag for some entities in a group

The public group page will highlight some entities such as talks, events or sponsoring packs (talks are the most important one).

By default they are automatically defined (lastest, random, most important or other criteria) but it could be nice for orga to choose manually which ones are displayed using the featured flag (like youtube or github pinned issue)

Improve user templating engine

Today, gospeak users can use mustache as a templating engine. It is nice when you can define the data shape but as it's a generic templating data format should be stable and generic.

It would be better to have a templating engine that support some logic so users have more power.

Add public Profile for Users

User table/object should stay light as it is used for authentication.
Users should be able to have a more detailed public profile with (for example):

  • bio
  • company
  • personal links (name & url)
  • avatar
  • ...

Improve event creation form (for orgas)

Today event creation form is quite basic, it could be improved a lot:

  • when default description is set, it should take a small place in the UI
  • add a default CFP option in the settings so CFP could be automatically set
  • event time could be set by default with the time of the last event
  • suggest last used venues along side the select, a single click on it should select it on the select
  • slug can be defined using a template

Invite/remove orga to a Group

When you create a group, you are the only owner and you need to invite other people to join it.
The invitation should be done using email regardless if the user already exists or not.

Allow group orga to add a tracking script (analytics)

It can be nice for orga to track the trafic in their public group pages.
An easy and powerful way can be to embed a user defined script on their page so they can use google analytics or whatever solution to gather their stats.
It can be risky to let users define a script, maybe we should just let them configure their analytics key but this imply we will have to support multiple analytics providers :(

Social login

  • github
  • twitter
  • linkedin (postponed)
  • google
  • facebook

Create Venue for group events

Should create proper Venue object instead of "simple" address with extended info:

  • local contacts (name, email, phone, description)
  • room size
  • company
  • description (for other details)

The Venue picker should suggest past venues and allow to create one in place.
Orga should also be able to list all venues and events that have been organized there.

Create a group using Meetup

Allow orgas to create a Gospeak group by connecting to a Meetup group.

User workflow:

  • click on a "Import my Meetup group"
  • accept oauth connection
  • redirect to the group dashboard page with everything already setup

What Gospeak do:

  • connect to Meetup
  • create a group using the meetup infos
  • save meetup integration in group settings
  • list existing events and venues (of Meetup) and create them in Gospeak
  • create a first default CFP (with the same name of the group)
  • invite other orgas to join the Gospeak group

Slack integration

  • Add config section in group to setup slack (auth keys & feature selection)
  • Allow to post a message to a chan when a proposal is submitted
  • Allow to create a new chan when an event is created
  • Allow to post a message to the event chan when a proposal is added to the event
  • Allow to post a message to the event chan when a venue is defined for the event

"Contact me" option for speakers and groups

Speakers (mostly) but also group may be contacted through gospeak but without exposing their contact info. This can lead to speaking opportunity for example.

  • Add an option in settings to enable/disable this feature
  • If enabled, add "contact me" form in the public page (speaker or group)
  • Build a basic list of messages in admin and send mail with message to speaker (let orga configure automation message if they want)

Contact all group members

A group orga should be able to send an email to all the group members using gospeak (so member emails can stay private)

Add discussion thread for a proposal

Orgas and speakers should be able to communicate about proposals. To facilitate that, gospeak should have some comment for a proposal.
Only group orga and proposal speakers can see and add some.
The discussion thread is linear (a simple list of comments).

The speakers should receive an email when a comment is added by an orga.
Orgas should be able to setup some automation to react on new comment (cf actions in group settings)

Allow group members to RSVP to an Event

Group member should be able to RSVP to an Event. They should be able to say Yes or No.
Number of Yes RSVP should be lower than the max attendee count of the Event.
Additional RSVPs should be taken in account but as a Waiting status (Yes but not accepted still).

RSVP order is very important, it can be kept using the RSVP time.

If a RSVP is changed from Yes to No, the older Waiting RSVP should be moved to Yes and the user notified by mail of this change.

Allow group orga to ask for proposal in listed/public talks

Speakers can use the Listed/Public status for their talk so orga can look at them and ask for a proposal.

This should be implemented ^^

Process:

  • Speakers set the talk status to Listed or Public
  • Group orga can see all the talks with these status (list, search, filter, sort...)
  • Group orga can send a "proposal request" for a talk, related to an existing opened CFP in the group. This creates a proposal for the CFP with a special status (so it's not listed in orga CFP proposal, only the speaker can see it and it's clearky identified as "requested")
  • The speaker gets an email about this request
  • The speaker see in his home that he has an open requested proposal, when he clicks on it, he goes to the details page
  • The speaker detail page of the requested proposal as buttons Accept/Reject. The first one edits the proposal and makes it pending (as any other proposal). The second one set the proposal to "canceled" and notify the group

So, 2 states should be added for proposals: Requested & Canceled

Create an embed widget for slides & vidéos

Gospeak should be able to display slides and vidéos from speakers talks/proposals.

They may have multiple format (cf #35) and should be embedded in a target size (quite difficult I think)

YouTube integration

Connect a Gospeak group to a YouTube channel to allow:

  • display channel stats on the group page and link to it
  • enable a curation screen that
    • show linked proposals/vidéos (with title of both to quickly check they are correct)
    • show unmatched proposals (not linked to a vidéo) and propose to link to one (using a select ordered by title distance)
    • show unmatched vidéos (not linked to a proposal) and propose to link to one

Implement public CFP

Gospeak should list publicly opened CFPs and allow anybody to submit a proposal.
If user is not logged, the form should propose to connect or create an account.

Twitter integration

Allow group orga to connect gospeak with their twitter account so they can automate some twitts.

  • Setup twitter auth in group settings (similar to meetup one)
  • Enable "Post a twitt" action in group actions

Add activity history to proposal

Proposal is the only entity that is shared among different kind of users (orgas & speakers) and it's a central entity to collaborate between them.
So it can be nice to build an activity stream for it so orgas & speakers can easily understand what is going on.

Events to track and display:

  • Creation: "Proposed by {{speaker.name}} to {{cfp.name}} on {{datetime}}" or "Requested by {{orga.name}} for {{cfp.name}} on {{datetime}}"
  • Edition: "Edited by {{user.name}} on {{datetime}}" (with eventually modified fields)
  • Accepted/Rejected
  • Comment added

Can be done using event sourcing, eventually... To be discussed

We can take inspiration from github issues/PR ;)

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.