Coder Social home page Coder Social logo

aufond's Introduction

aufond

A résumé for the modern age

Mission

"An elegant and straightforward way to exhibit your lifelong achievements." — Visit the app homepage for more product info.

Structure

Since Meteor.js provides tight conventions for structuring your app, most of the app is structured the way you'd expect if from a Meteor project.

There are two abstractions that stand out the most:

  • ReactiveTemplate - Widget-like component that encapsulates the logic related to a template, making use of the reactive programming concept and the powerful Deps API
  • MeteorModel - Agnostic model wrapper for the Meteor.Collections with a common ORM interface

Also notable is that the entire app is written in CoffeeScript.

Entry point

The app router is built on top of Backbone.Router. It is intertwined with a global controller, which manages the changing of one controller (page layout) to another. The entire client app starts when Router.start() is called, when this global controller is initialized, which happens because of its placement in the index.html layout.

Installation

Requirements

Running locally

aufond is as easy to start as any other Meteor app. Just run meteor from the repo root.

Settings

A JSON settings file can be loaded using the --settings option. E.g. meteor --settings settings.json

The settings file is not versioned needs to be created, using the settings.example.json scheleton.

Running in the cloud

Run this on a linux machine, in production environment. — aufond.me works on Debian 7 (Wheezy)

# Define the path where the project will be situated
echo "export AUFOND_PATH='/var/www/aufond'" >> ~/.bashrc && source ~/.bashrc

# $AUFOND_PATH will always be defined on this machine, for this user
mkdir -p $AUFOND_PATH && cd $AUFOND_PATH

# Ensure Git is installed and fetch the aufond repo for the install script
aptitude install -y git && git clone https://github.com/skidding/aufond.git .

# Setup project
script/install.sh

Bundling and starting in production

# Create Meteor bundle
script/bundle.sh

# Start bundled Meteor app on localhost, port 80. If a process is already
# running on this port, its PID will be displayed instead; this is useful for
# killing that process and restarting the app
script/start.sh

# Start app on a specific port
script/start.sh -p 3000

# Start app for a specific hostname. The hostname is used as the value for the
# ROOT_URL environment variable of Meteor. It's used by the framework to
# generate internal URLs
script/start.sh -h aufond.me

# Specify the Mongo connection (the start script defaults to a guest db hosted
# at MongoHQ)
script/start.sh -m mongodb://guest:[email protected]:10016/aufond_guest

Don't forget to replicate the settings.json file you're using locally. It will be picked up and included automatically by the start.sh script, from the root project folder.

Importing data

There are a few dumps included the project if you want to start off with some data after installing the app. Considering that the local Mongo connection used by Meteor defaults to running on the 3002 port, here is a command line example for quickly importing a user with timeline entries:

mongoimport -h 127.0.0.1:3002 -d meteor -c users --file private/mongo-dump/sivers.user.json
mongoimport -h 127.0.0.1:3002 -d meteor -c entries --file private/mongo-dump/sivers.entries.json

You can now check out localhost:3000/sivers to display the imported data beautifully.

Exporting

As a reference, here's how the exporting is done using the opposite Mongo utility, mongoexport:

mongoexport -h paulo.mongohq.com:10016 -u guest -p aufond1234 -d aufond_guest -c users -q '{username: "sivers"}' -o sivers.user.json
mongoexport -h paulo.mongohq.com:10016 -u guest -p aufond1234 -d aufond_guest -c entries -q '{createdBy: "XDX52YC3jBPmbsiZS"}' -o sivers.entries.json

Root user

A root user can list all the other users with extended information and can overall do more actions with the help of a few extra tabs in the admin section. Making a regular user root is rather manual and requires direct Mongo access. E.g.

db.users.update({username:'test'}, {$set: {isRoot: true}})

PhantomJS dry run

aufond uses PhantomJS to generate static exports of your timeline, but you can play with or debug the script manually, from the command line. Note that it has a few particularities relevant to the timeline layout.

phantomjs server/.phantomjs/export-pdf.js http://google.com google.pdf

aufond's People

Contributors

ovidiuch 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aufond's Issues

Left/right nav buttons

Discret and positioned on the bottom right, also only on desktop view.

Maybe even a "scroll down" button

Open source the LESS buttons

  • Make them work out of the box w/out certain external mixins or fonts
  • Make buttons work with click events, make it trigger even when being a victim of the text position shift #33
  • Advertise Aufond in the project README
  • Make Meteor package

favicon for user timelines

<link rel="icon" 
      href="https://www.filepicker.io/api/file/xxx/convert?w=32&h=32&fit=crop&quality=100" 
      type="image/png">

Scroll to top after opening timeline

When scrolling page a bit in landing page and opening demo, the timeline will continue to be scrolled to the same degree. It needs to start from top

not being able to bundle

hi,

i am not sure what is wrong.

i am having this bundle error.

Errors prevented bundling:
While building the application:
node_modules/fibers/build.js:1:15: Unexpected token ILLEGAL
node_modules/fibers/test.js:1:15: Unexpected token ILLEGAL

Add videos to timeline entries

Need

While trying to create a demo profile for Derek Sivers, it seemed like having videos would bring a lot of value to the timeline by adding a lot of information in a condensed space.

Deliverables

  • Have an attach a video button in the admin section, per each entry

CONTINUE SPEC

Investigate parallel bundling

Right now it seems once a new bundle has been located in the .bundle folder the active process stops working. If this is the case, an automatic restart should be enforced after each bundle. The start script should have a reset option and the bundle script should call the start script.

Persist votes through userId / guestUserId instead of cookie

Should've been thought it like this from the beginning, but there was no guestUserId when started.

Everything already works, but this would make sure logged-in users have their votes persistent even between browsers or after clearing cookie. On the plus side, you still have your votes after you log out if you stay in the same browser now.

Site down?

I just checked in and was going to make a few updates, but I am getting nothing at aufond.me. Is this a temporary thing, or is the hosted version shut down?

Thanks!

Create HN post

Show HN: aufond.me — a résumé for the modern age [Meteor.js MVP]

Hi there, guy who made this here. There's a disclaimer at the bottom of the landing page for general context, but here is the technical side of the story.

I took a shot at building something in my spare time (weekends and such), while having a fully engaging full time job. It spanned over almost 6 months, but there were weeks when I had not even a single commit.

Besides having an idea to believe in, I have to say, Meteor was also a big part of making this happen. It's the first time I'm building anything with it, but after a few weeks of setting the tone and a few small lib files, the productivity of having it all in one place was unbeatable by any other previous experience. I could write some more about my experience with Meteor if other people are curious to try it but never had the chance.

Meteor wasn't the only productivity booster though, I used as many out-of-the box services and technologies as possible. Not to mention organizing yourself as if you were in a team is a key ingredient in keeping a project together for so long with so many breaks. I used a private Github repo, but using Bitbucket or other similar tools is just as well

Technologies

  • Meteor.js
  • CoffeeScript (If you don't hate it you will eventually learn to use it to your advantage)
  • Bootstrap (It helped a lot, but I would drop it completely by the time the app could be considered out of the "MVP" state)
  • Underscore + Backbone Router (Models wouldn't fit with Meteor, I made something lighter by hand)
  • CSS3 (Go for it)

Services

  • Rackspace VPN for hosting
  • MongoHQ for data storage
  • Filepicker.io for image upload and processing
  • Mixpanel for stats

Code

  • 2068 lines of CoffeeScript (Including comments!)
  • 927 lines of LESS CSS (Here too, including comments---Yes, I add comments to CSS)
  • 583 lines of Handlebars HTML
  • 73 lines of Bash scripts

Project

  • 403 Git commits
  • 35 closed Github issues , the ones that made it through the "MVP" milestone

Make sure timeline looks ok on all devices

  • Learn how <meta name="viewport"> works
  • Test on iPhone
    • Works, something doesn't scroll but overall good. Tapping takes as while though, maybe transitions could be instant on mobile and enabled with "desktop view" media queries
  • Test on iPad
    • Same as iPhone, just larger, needs more testing
  • Test on Nexus One
    • Works, but resolution width is smaller than 600px and it gets scroll, also circles are squares
  • Test IE on Dell
    • IE10 - Surprisingly perfect
    • IE9 - Almost perfect, no height transitions
    • IE8 - Mobile view (no media queries probably), and the images are also centered bad (wrapper stays 600 I think), all circles are squares
    • IE7 - Doesn't work at all Exception from Deps recompute:,Unable to get property 'slice' of undefined or null reference, marketing works but without icons

Investigate preloading

Check whether a loading message can be shown asap, in case the full Meteor stack might take long to load.

A smooth initial transition might be of great value in creating good first impressions

Create demo timelines

Should be any timeline with an extra parameter. The presentation will consist of a few pre-programmed steps that work on and expect user events (no auto play). After each triggered action a new yellow tooltip is being shown. Bad direction

Find and reach (also getting feedback) models for timeline. Options:

Populate more with data gathered from the internet and contact them to ask for their opinion.

  • Create private beta protection in order not to scare away the targeted models (should be profile field for all, but auto-completed for these.) Let's just wait until someone even pays attention to this

Update own /skidding profile and make it public

  • Complete remaning entries (uberVU, Roadbucket [mention Mozaic.js], aufond.me [optional, too early to draw conclusions])
  • Archive current blog to http://archive.ovidiu.ch/v2/
  • Make ovidiu.ch load aufond.me/skidding (CNAME dns entry?) - Used VirtualHost redirect on ovidiu.ch, can't use CNAME until aufond supports mapping from userdomain/ to aufond.me/username #69
  • Make skidding.github.io redirect to aufond.me/skidding Remove it altogether, too many loose ends
  • Set public links to aufond.me/skidding - To ovidiu.ch for now
  • Add Sivers' new business and reply to email

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.