GithubHelp home page GithubHelp logo

gettogethercomm / gettogether Goto Github PK

View Code? Open in Web Editor NEW
467.0 32.0 87.0 4.68 MB

Event manager for local community events

Home Page: https://gettogether.community

License: BSD 2-Clause "Simplified" License

Python 65.64% HTML 24.27% CSS 1.80% JavaScript 8.26% Dockerfile 0.03%

gettogether's Introduction

Get Together

Build Status

Get Together is an open source event manager for local communities.

Try it free at https://gettogether.community

Goals

  • Be feature-competitive with Meetup.com
  • Allow multiple instances to share federated event data
  • Provide sustainable, cost-effective hosting for FOSS communites
  • Be developed and maintained by the communities using it

Stack

This project has been built using Django 2 and Python 3.

For more details on dependencies, please check requirements.txt.

Getting Started

Install Git

First, make sure you have Git already installed.

It usually comes pre-installed in Mac and Linux but in Windows you need to run the installer available in the link above.

Install virtualenv

Also make sure you have virtualenv in your computer by running:

virtualenv --version

If you get an error, use pip (included in Python3) with the following command:

pip install virtualenv

Configure your local repository

If you haven't already, fork the project at https://github.com/GetTogetherComm/GetTogether

Clone your forked repository in your computer (see detailed instructions here).

Navigate to the repository's location using the command line: cd GetTogether

Add https://github.com/GetTogetherComm/GetTogether.git to remote following these instructions.

Configure the virtual environment

  • If you have Python3 already configured as the default version for your computer, just run:
virtualenv ./env
  • But if your default is Python2, then run:
virtualenv --python=python3 ./env

Install dependecies and migrate the database

  • If you are in Mac or Linux:
./env/bin/pip install -r requirements.txt
./env/bin/python manage.py migrate
  • If you are in Windows:
./env/Scripts/pip install -r requirements.txt
./env/Scripts/python manage.py migrate

Rename the local_settings file

Find the file local_settings.example and copy it in local_settings.py with the following command:

cp local_settings.example local_settings.py

Create a super user

  • If you're in Mac or Linux run:
./env/bin/python manage.py createsuperuser
  • If you are in Windows:
winpty ./env/Scripts/python manage.py createsuperuser

Start the server

  • If you're in Mac or Linux run:
./env/bin/python manage.py runserver
  • If you're in Windows:
winpty ./env/Scripts/python manage.py runserver

Installing pre-commit hooks

Pre-commit is a tool that helps us commiting better code. Before writing any code first install the hooks to your repo.

  • If you're using Mac or Linux, run:
./env/bin/pre-commit install
  • If you're in Windows:
./env/Scripts/pre-commit install

From now on everytime you commit some code this will be checked by our pre-commit hooks.

Code formatters

We use the following code formatters:

They are included in the requirements.txt so they were installed already when you installed dependencies.

On the first commit after doing pre-commit install, Black and iSort it will create a new environment, which may take a few minutes. This environment will be reused for all subsequent commits.

Loading City data

In order to make it easier to create Places and Teams without having to manually enter records for Country, SPR (State/Province/Region) and City, you can preload them using data files from https://download.geonames.org/export/dump/

The provided load_spr and load_cities commands will only load data if the parent country (or SPR for cities) exists in the database. This lets you choose whether you want to load every city, only cities for select countries, or only for select SPRs.

Countries

Download the countryInfo.txt file from GeoNames, and load it:

wget https://download.geonames.org/export/dump/countryInfo.txt
./env/bin/python manage.py load_countries countryInfo.txt

SPR

Download the admin1CodesASCII.txt file from GeoNames, then run:

wget https://download.geonames.org/export/dump/admin1CodesASCII.txt
./env/bin/python manage.py load_spr admin1CodesASCII.txt

Cities

You have a few choices for City data files. GeoNames provides data files for cities with more than 15,000 residents, cities with more than 5,000 residents, and cities with more than 1,000 residents. The smaller the number, the more cities there will be in the data file (and the longer it will take to import them all).

Download the file you want from the links above. They will be zip files that you must unzip before using. Then import the cities by running (for your downloaded file):

./env/bin/python manage.py load_cities cities15000.txt

Using docker

docker build -t get_together .
docker run -e "DEBUG_MODE=True" -e "SECRET_KEY=xxxxx" -e "ALLOWED_HOSTS=localhost,127.0.0.1" -d --name get_together -p 8000:8000 get_together
docker exec -it get_together python manage.py createsuperuser

Using docker-compose

docker-compose up -d
docker-compose exec get_together python manage.py createsuperuser

You can then connect to the container by going to localhost:8000

Test Federation

You can import live event data into your "Searchable" table with this command:

./env/bin/python manage.py import https://gettogether.community/searchables/

Getting Involved

To contribute to Get Together, you can file issues here on GitHub, work on features you want it to have, or contact us on Telegram to learn more.

Currently the project needs:

  • Designers
    • We need a color scheme for the website
    • We need a logo for the project
    • We need user stories and mockups for those pages
  • Front-end developers
    • We need to pick a JS/CSS framework for the front-end
    • We need to Django page templates
    • We need to know what APIs are needed for a dynamic front-end
  • QA Engineers
    • We need Django test cases setup
    • We need fuzz-testing setup with something like model-mommy
    • We want testing automated on github pull requests
  • API/Federation experts
    • We need to decide on using AppStream or rolling our own data/protocol
    • We need to architect what data will be federated and it's use cases
    • We need to support authenticated access to APIs for 3rd party apps
  • Devops
    • We need a way to easily deploy and update GetTogether in production
    • We need an easy way to get a development environment up and running
    • We need to find a hosting service for gettogether.community

If you can help with any of these, please get in touch with me!

gettogether's People

Contributors

0xbeeb avatar bheesham avatar borisrorsvort avatar cclauss avatar craigmaloney avatar crashsystems avatar dethos avatar dukebody avatar eabedrapo avatar femilamptey avatar gekitsuu avatar meskobalazs avatar mhall119 avatar michael-k avatar nea89o avatar oxymora avatar pixelbrackets avatar saitejavemula avatar singingwolfboy avatar srikanthkanjarla avatar stuartlangridge avatar urbalazs avatar vergissberlin 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  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

gettogether's Issues

Menu broken on mobile

The compact menu won't open on mobile. It flickers open for a moment and then disaplears.

Team form takes too long to load

It seems like the Team form is loading the entire list of Country/SPR/City from the database even though they won't be used in the HTML of the form itself now that it's using a LookupField

Enable translations

Configure the process for exporting .pot files and importing .po files. Make sure any hard-coded display strings are wrapped in the appropriate translation tags/functions

Global events support

Support grouping multiple Events from different Teams under the same real-world event. For example, multiple tech groups might attend a big tech conference, or multiple outdoorsing teams might all plan an Earth Day event.

Add Categories for Teams and Events

Allow Teams to pick one or more categories that they will focus on. Use those categories to help users find teams and events that interest them.

Strategy documentation reference?

a) is there a strategy document(ation) somewhere?
b) how are strategic elements identified and pulled out of "normal issues"? (and tagged/grouped?)
c) Examples/Most pressing strategic clarifications:

  1. Distinction btw. this platform and CMS related to collaborative features. Should this system attempt to "be everything needed for effective communication and organisation of event content, or is it smarter long-term with an integration strategy? (API's)

  2. Security/Logins/Account features related to reputation management. (partially overlaps with collaboration features)

Add speaker management features

Add features for event organizers to find, schedule, and promote a speaker at their event.
Add features for speakers to find teams they can speak to
Allow users to learn more about a speaker and their past presentations
Allow users to create their own speaker profiles

New models:

  • Speaker (1to1 to UserProfile)
  • SpeakerRequest (1toMany to Team)
  • Talk (1toMany to SpeakerProfile)
  • Presentation (ManytoMany Event & SpeakerPresentation)

Improve Lookup field

  • Make the search field more obvious, focus it by default
  • Set default value and text from server-side values
  • Add an emblem or something to indicate it's a search field

Create account with a docker registry

We need a place to publish our docker images. Some possible options:

Docker Hub
quay.io

My vote is for quay.io due to better auth controls and more advanced feature set.

Allow private teams

Not every team wants to be public or to publicize their events. Allow for teams to be marked as "private" which will make them only visible to members. New members can be added by the owner or an administrator. Provide an invite link to allow new members to self-add

Documentation doesn't mention loading countries

I think from poking around in the code, I'd need to:

wget http://download.geonames.org/export/dump/countryInfo.txt
./env/bin/python manage.py load_countries countryInfo.txt

Without doing this, I can't create a team.

I think I might also need to add cities, but following similar steps for the unpacked cities1000.zip didn't do anything :(

Improve new user workflow

Create a workflow for new users that accomplishes the following:

  1. Gets them to create an account and logged in
  2. Have a profile with at least
  3. Display name
  4. Email address
  5. Avatar image
  6. Find teams near them to join
  7. Find upcoming events near them to attend

Allow creation of virtual/remote Teams and Events.

Not all Teams belong in one city; for instance a Team may be distributed and want to schedule events that happen only online. Allow creation of a Team without an associated City.

Likewise, Events may have no real-world Place - we should either allow creation of a Place without a City (e.g. 'IRC' or 'Google Hangout') or allow Event creation with no Place.

Any chance of integrating with a site like joind.in?

Joind.in is a site "where event attendees can leave feedback on an event and its sessions." Lanyrd was a similar style of website. It would be useful to either have direct site integration, or failing that, having some field to advertise where the schedule and feedback should be directed.

Setup Travis CI Account

We will need a CI/CD system to automatically build, test and release the software.

Travis is a great option because it's powerful and free for open source projects.

Unless anybody has a really good reason not to use Travis, let's go for it.

Make a landing page

Right now users are redirected to the events listing page. Instead use the homepage to display upcoming events, nearby teams, and any other relevant information that the user can act on quickly.

Include the ability to search for events by name and distance from the user

Build docker compose for easy development

Build a docker compose file to allow for easy development.

I'm not a python dev, but I imagine there is something we can use that monitors the file system for changes and reloads the necessary django components.

Users can't see event if they're not logged in

Users can't see event the event, unless they're logged in.
Application fails with:

RelatedObjectDoesNotExist at /events/5/encontro-online-comunidade-ubuntu-pt/
UserProfile has no user.

Organization support

Implement the ability to group multiple Teams into a single Organization.

Provide central management, reporting and branding of teams and events

Setup email notifications

Add configurations for sending emails, and send messages to team owners when new people join, on comments on an event to people attending it, and to new user when they first signup

Improve Lookup form widget

While the Lookup form widget is functional, it's not intuitive to users who don't understand why the dropdown menu is empty. It should be replaced with a widget entirely in Javascript, with a hidden field for transmitting the actual data back to the form.

It's only possible to access the site using 127.0.0.1/localhost

My standard development practice is to deploy to a vagrant host and then access it using a private network (it's a weird quirk - I know that ๐Ÿ˜ฆ, but I like isolating my development environments), however, this means I got:

DisallowedHost at /

Invalid HTTP_HOST header: '192.0.2.100:8000'. You may need to add '192.0.2.100' to ALLOWED_HOSTS.

From reading the code, I assume I should create /get_together/local_settings.py which has ALLOWED_HOSTS = [ '0.0.0.0/0' ] or ALLOWED_HOSTS = [ '192.0.2.100' ] but... I'm not really a Django user, so I don't know the convention here.

Determine hosting provider

We need a place to put this thing :)

My vote is for Google Container Engine (GKE), which is Google's Hosted Kubernetes solution. I think it's the right balance between getting us up and running quickly, cost effectiveness (especially since getting rid of the management fee), and looking to the future.

Teams can't be edited.

There is no way to edit a team, so if one was created with wrong settings, it's doomed to stay there for eternity due to #14.

Currently, login needs to be via /admin and not using /

One of these options should be available:

  1. "Do we have auth strings for Google/Twitter/Facebook/Github? Show their OAUTH flags. If not, login with /admin creds"
  2. Follow the Sandstorm.io route - "Github/Google are fine auth systems. If not, we'll email you a sign-in URL. In all cases, you can run an admin command to get an admin URL"
  3. Go with the Mozilla auth route - "We never store auth creds about you - but we expect a working email server. Put in your email address, we'll email you a sign-in URL"

I am aware this is very early code :) However, having the OAUTH flags at the outset means there's an expectation these will work - which isn't the case, unless there's a localhost-auth-route that we could be using... and I don't think that's there yet.

Repeating events

I have an event that happens every Wednesday at the same time. It would be nice to enter it once and have it repeat ad infinitum (until I remove the event).

Enable searching for place names / allow for frequently used places

When creating a new event I wanted to be able to use the place that I had used for the previous event. Unfortunately that information wasn't available to me and I stalled while entering the new event.

Ideally this would either keep a table of the previously used places per team / event, or allow for searching for existing places / adding new places.

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.