Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create Project Architecture Document #3

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
32 changes: 32 additions & 0 deletions FEATURES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Initial Features

The project will have a simple Django admin interface. The organizer can login to the admin dashboard and add the value in the Data Models. There will be some simple pages to enable the automation we wan

## Social Media Integration
- Add Social platform routes for creating posts
1. meetup.com - This is the primary platform where we post the meetup event. Use the meetup api to create/update an event, post update to subscribed users of the group, add comment to a event
2. Facebook - Use Facebook api to create a post in Facebook, add comment to a post
3. Twitter- Use Twitter api to create a tweet, mention a tweet
4. LinkedIn - Use LinkedIn api to create a post in LinkedIn, add comment to a post
5. Mailing list - Send email to mailing list of the community
6. Telegram - Post a message in Telegram group
- Add a simple form to connect and post the events in different platforms

## Venue Directory
Add a view to list all the Venues and contacts. Venue details can be added in the Django Admin by the Organiser

## Speaker Directory
- Create a simple form that can be used by speakers to enter their details
- Add a view to parse a GitHub issue and add the CFP details to Speaker details

# Extended Features
- Compose a event description by reading GitHub Issues and Poster uploaded to GitHub repo
- Create Draft message
- Create a workflow for peer review of notifications to be sent out in social media
- Automate a way to upload slides/demo code from Speakers
- Archive data from meetups using meetup api
- Generate a report of past meetups - We can use this statistics in community presentations
- Create backend end points for generating views for Community website
- Listing of the meetups
- Past Speakers of meetups
- Listing of Venue partners
89 changes: 89 additions & 0 deletions PROJECT-ARCHITECTURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Project Architecture

The main focus of the first version will be to integrate social media handling abilities to the app. We will have a basic event structure. Each event will have multiple speakers and a Venue. For each event we need to manage multiple social media platforms. So there will be 2 modules - `event` and `social`

Here is a probable project directory structure

```
meetup-manager
├── meetup-manager
│   ├── meetup-manager
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   ├── event
│   │   ├── admin.py
│   │   ├── apps.py
│   │   ├── forms.py
│   │   ├── __init__.py
│   │   ├── migrations
│   │   │   └── __init__.py
│   │   ├── models.py
│   │   ├── permissions.py
│   │   ├── static
│   │   │   └── event
│   │   │   └── hydpy_icon.png
│   │   ├── templates
│   │   │   └── events
│   │   │   └── index.html
│   │   ├── tests.py
│   │   ├── urls.py
│   │   └── views.py
│   ├── social
│   │   ├── admin.py
│   │   ├── apps.py
│   │   ├── forms.py
│   │   ├── __init__.py
│   │   ├── migrations
│   │   │   └── __init__.py
│   │   ├── models.py
│   │   ├── permissions.py
│   │   ├── serializers.py
│   │   ├── tests.py
│   │   ├── urls.py
│   │   └── views
│   │      ├── __init__.py
│   │      ├── meetup_viewset.py
│   │      ├── twitter_viewset.py
│   │      └── mailer_viewset.py
│   └── manage.py
├── LICENSE
└── README.md
```

## Event Module

The event module will contain the Event, Venue and Speaker models. It will have 3 pages - Event lisiting page, Event details that will have a list of all the social media posts made for the event and the event notify page that will be used to create the posts. The notify page and list of social media posts will only be visible to the organiser.

The mockup of the noify page is attached. It will use Ajax requests to make the various posts from the page.

There will be no Venue or Speaker page in the initial version. It will be available in django admin where the organise can add them.

### Autofill feature
The Autofill feature will support the auto generation of posts in various platfroms from the content in meetup.com. The user has to enter the text in the meetup.com textbox and when the user clicks autofill it will populate the content in other textboxes with some added intelligence, e.g. Truncating content for Twitter to 150 characters, making inline links bulleted at the end for mailing lists. The Autofill features will be a JS functionality which will happen in the client side. The user can then tweak the posts instead of manually filling each and every post.

**Urls**
```
/events - Event listing page
/events/<id> - Event details
/events/<id>/notify - Create social media posts
```

## Social Module

The social module is the one that will actually create all the social media posts by calling the social media APIs. It will act as a wrapper for the social media APIs and act as a middleman to invoke the APIs. When a post is created successfully it will store the necessary details of the post in the DB. The module will have the social media models for each platform.

It will use `django-rest-framework` to expose rest urls for making the social media requests. To keep separation of concern between each social media API we will utilising Viewsets from DRF which will be organised in separate files under `views` module. This module will only serve as the API for making the posts. So it will not have any templates.

**Urls**
```
# Meetup.com
/meetup - [POST] Create a meetup.com event
/meetup/<id> - [PATCH] Update a event in meetup.com
/meetup/<id>/comment - [POST] - Create a comment
/meetup/<id>/email - [POST] - Send email to subscribers

# Mailing list
/email - [POST] Send email to mailing list
```
55 changes: 53 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,53 @@
# HydPy
New design and implementation for HydPy web app
# Meetup Manager

## Context

A lot of tasks and preparation involved before organising Community meetups are repetitive and can be automated using software.

One of the major tasks include making announcement to various social media platforms and mailing lists. Hence we need a good way to handle these announcements so that when the organiser makes an announcement it gets announced across various social media platforms.

We also need contacts of various speakers who are willing to present at the meetups. Many times it happens meetups fall short of speakers and we want to reach out to speakers in our contact for presenting in the meetup. Instead of finding all over we can use the past speakers list and shoot them an email.

For meetups we also need a list of Companies and PoCs whom we can contact for hosting the meetup. We can store this data in a central place for easy accessibility. This will enable the easy transfer of responsibilities between organisers of the meeup.

## Scope
The meetup manager aims to solve the problem of announcing meetup notifications in different platform from one place without having to know the credentials of each platforms. Additonally it will serve as a common location for getting data about speakers, venue and meetups.

## Purpose of the Project

The purpose of the project is to Automate most common tasks for meetup Organizers and also provide a Workflow for the tasks. Based on that here is a list of user stories which can be useful to describe various use cases.

### Social media Integration/Announcement system

The application will have an Admin dashboard where in if the Organiser creates an announcement it will be scheduled as an event in meetup.com and shared to all social media platforms (Facebook, Linkedin, Twitter, Telegram) and mailing list.

Before the event it can make announcements for opening Call for Proposals for the next meetup.

After the event if we want some updates to be posted in meetup.com or any other social media platform it will post a comment in the respective channels.

Further enhancements can be done to introduce a peer review workflow that will notify co-organizers to review the content before posting.

### Speaker Directory

When a speaker submits a proposal in the CFP platform it should be able to save the speaker contact and categorize them on their area of expertise for further usage as need be.

### Venue Directory

The organiser will be able to save the Venue and contact details of a particular Venue for future meetups.

### Updating meetup resources to repository

Once the meetup is over we can automatically post the resources (slides, code repo) from CFP platform to the meetup repository in GitHub. (This is something new I came up with) Since we are using GitHub as our CFP platform we can use the GitHub API to achieve this. But for that we need to come up with a structured comment that we can use that for uploading resources.

## Future scope of the Project

1. Backend service for Community website - The meetup manager can serve as the backend of HydPy website. Currently the website is a static website which need to be updated manually. We can create some dynamic pages based on the data stored in the meetup manager. This can be

- Listing of the meetups
- Past Speakers of meetups
- Listing of Venue partners
2. Creating Workflow for peer review of notifications posted on social media platforms

## Tech Stack
meetup-manager will be a django app ideally using v2.2 LTS. It will use jQuery for front end.

Binary file added meeetup-manager-database.pdf
Binary file not shown.
Binary file added meetup-manager-social-mockup.pdf
Binary file not shown.