Scrum Master:
Product Owner:
Dev Team:
Josh Stevens
Brian Boyko
Vaishnavi Reddy
Peter Do
Daniel Moser
Adventure Awaits
The Problem:
You are backpacking across Europe, but one night, your plans fall through. So you'd like to hang out with people and be social. But you don't know anyone locally.
Where can you meet up with someone who would like to talk, even through language and cultural barriers, just for some conversation?
amiGo
The Solution:
amiGo
amiGo: A website where people can find other travelers in the same city at the same time for swapping travel stories in public places, and for finding other people who share your interests while traveling.
The Stack - MAKE
amiGo
-
Database: MySQL
- Chosen because data is highly relational
- Industry Standard and broad adoption base
-
ORM: Knex
- ORM used for easy conversion to other databases such as PostgreSQL
and MongoDB. - Knex's promises ability allows for complex queries and multi-step processes.
- ORM used for easy conversion to other databases such as PostgreSQL
-
Server: Express.js
- Ease of integration with Angular
-
Views: Angular.js
- Large support base.
- FrontEnd/BackEnd integration.
- Misc: Bootstrap, EJS, & Connect-Flash
MySQL
Knex.js
module.exports = function(knex) {
return {
addTrip: function(destination, geocode_latitude, geocode_longitude, timeStart, timeEnd) {
return knex('trips')
.insert({
'dest_name': destination,
'geocode_latitude': geocode_latitude,
'geocode_longitude': geocode_longitude,
'time_start': timeStart,
'time_end': timeEnd
});
},
getTripsById: function(id) {
return knex('users')
.innerJoin('users_trips', 'users.id', 'users_trips.user_id')
.innerJoin('trips', 'trips.id', 'users_trips.trip_id')
.where('users.id', id)
.select('username', 'dest_name', 'geocode_latitude',
'geocode_longitude', 'time_start', 'time_end');
},
...
Express
// Making Trips
app.post('/api/createTrip', isLoggedIn, function(req, res) {
Trips.addTrip(req.body.destination, req.body.geocode_latitude, req.body
.geocode_longitude, req.body.start, req.body.end)
.then(function(response) {
res.send(response);
});
});
// controllers
app.get('/controllers/trips.js', function(req, res) {
res.sendfile('controllers/trips.js');
});
app.get('/controllers/profile.js', function(req, res) {
res.sendfile('controllers/profile.js');
});
app.get('/controllers/friends.js', function(req, res) {
res.sendfile('controllers/friends.js');
});
Angular
<div ng-controller="MakeTrips">
<div class="col-md-12">
<div class="col-md-6">
<h3>ng-controller="MakeTrips"</h3>
<form type="submit">
<p><label>Destination:</label><input ng-model="destination"></p>
<p><label>Start Time:</label><input ng-model="start" type="date"></p>
<p><label>End Time:</label><input ng-model="end" type="date"></p>
<p><label>Trip Activities</label><input ng-model="activities"></p>
<p><label>Trip picture (URL)</label><input ng-model="tripPic"></p>
<button ng-click="makeTrip()">Make Trip</button>
</form>
</div>
<div class="col-md-6 response">
Response
<pre>
{{ response }}
</pre>
</div>
</div>
</div>
Backend Features
amiGo
-
Signup/Login via Username/Password or Facebook API
-
Creating trips by destination and travel period
-
Automatic retrieval and storage of Geocode data (lat/long)
-
List activities
-
Profiles
-
Friends/Follow
-
Send & Recieve Mail
-
Leave Feedback
- Write Blogs
Frontend Features
amiGo
-
Signup & Login: Facebook or amiGo
-
Create Trips
- Display user's trips
Feature Wishlist
amiGo
-
Build out the views
- Profiles, Adding Trips, Displaying Trips, Friends, Messages, Blogs
(If you like front-end work, this project is for you!)
- Profiles, Adding Trips, Displaying Trips, Friends, Messages, Blogs
-
Calculate distances between trips and search-by-distance
- Using the Haversine Formula
- Integrate Angular-Google-Maps to display trips in an area
-
Logical checking
- e.g., Making sure that the second feedback someone leaves for a particular person does not create extra feedback, but overwrites it.
- e.g., Is the departure time before the return time?
-
Extra Credit:
- Integrate facebook profiles into the amiGo profiles
- Allow users to login with Twitter or Google
-
Nightmare Mode:
- Allow users to book flights from the app.
amiGo
By brianboyko
amiGo
- 908