WePlaygroup was designed to be a social networking site for parents, with a focus on finding and creating playgroups. A playgroup is simply a gathering of similarly aged children, with one or more accompanying parents, that meet in social settings, which helps build interpersonal skills for the children. The site revolves around a user’s ZIP code, and provide location based information with regards to "near-by" content. I wanted parents to easily locate local playgroups, activity centers and kid-friendly restaurants.
To help maintain a member’s interest, I wanted to offer a host of other ancillary services: playgroup activities, parenting tips, articles and news feeds, family coupons and a general classifieds section - all of which can be contributed from and rated by other members. My goal was to provide as many opportunities as possible for the community to interact with each other, and the relevant content.
I also wanted to establish a sense of connectedness between content types. No matter where the user might end up, they would always have a chance to find some other resource that might be of interest (near-by restaurants to the playgroup they are considering joining; recent parenting tips on the playgroup activity page they’re replying to, etc.).
Why I chose Drupal
"How I built a social networking site on the bus"
I chose Drupal for its ease of use and low barrier of entry. I did my fair share of research amongst the other players in the open source CMS community, but ultimately found my way back to Drupal. I knew that no matter the choice in platforms, some diligence would be required to get past the functionality offered by an out-of-the-box site.
While I still find the backend aspects of Drupal to be a bit taxing (e.g., updating Drupal core, keeping modules in check), getting out of the starting blocks is entirely painless, if not trivial. I loved being able to spin up new local sites, test potential modules, work out their kinks and then integrate them into my production site. The development process became so fluid, that once I had the initial framework for WePlaygroup developed, I spent the vast majority of my free time (riding mass transit to and from my regular job in downtown Houston) fleshing out the mechanics of the site.
Truth be told, I ultimately chose Drupal because of the community. I had only dabbled in the PHP waters prior to starting the website, and the Drupal community not only answered questions about the CMS, but fielded general programming questions as well. That in turn motivated me to help others – I knew that working with a CMS that I cared about would make all the difference in the development process.
Design & Theming
The site leverages the default Garland theme, and has obviously been heavily customized using CSS and images created in Photoshop. The color scheme was derived from a logo I had initially contracted a professional company to develop, but after some early initial feedback, I opted to strip the logo down to something my testers felt was more “kid friendly”. For the curious, the logo/text is based off the Calvin & Hobbes comic strip.
Overall, my intent was to develop a "Web 2.0" style interface (however overdone that phrase may be). I wanted big buttons, large/legible text and a low barrier to registering on the site. My initial design was somewhat "sterile", according to one of my testers – she felt the color scheme was warm and inviting, but the icons were too "corporate". A short time later I thankfully discovered the wonderful set of "cute rabbit" icons (thanks Flameia Design), used primarily on the non-authenticated homepage, and a few list pages.
It was this change that prompted me to include a new carousel on the homepage, leveraging my new bunnies to their fullest potential. Since Drupal let me control specific regions of my front page, I was able to drop in some custom jQuery magic. The introduction of the carousel also afforded me the change to further drive new users to the registration process, as the last slide displays the rather large "Register" button.
Implementation
As with any new undertaking (and when I started this project, I was very new to Drupal), the best approach is to dive right in an experiment. I started simple, and began with what I knew would be one of two focal points on the site – groups – or in Drupal’s case, Organic Groups. I knew that the heart of my service would revolve around users finding or creating groups, and that that would be accomplished via ZIP code searches.
Once I had the basics of OG working, it was a matter of simply "tacking on" all the other features I thought would make the site useful to parents looking to find playgroups, and meet other parents: forums, friend lists, sharing content, photo galleries, bookmarks, etc. The bulk of this functionality was handled by out-of-the-box Drupal community modules (with some slight tweaks here and there for formatting purposes primarily). This interconnected idea leant itself to a few helpful "near-by" modules available from the members homepage, showing both playgroups and other moms with a specific radius to their provided zip code.
From the onset, it was my intent to make the site as "socially accessible" and acceptable as possible. To that end, virtually every content type can be voted on by other members, or shared using either a custom Share this! module or the integrated Facebook module. In turn, the comments can be flagged (discouraging and removing negative comments) or marked as helpful (encouraging and rewarding user feedback).
Features & Highlights
Playgroups: The focal point of our service, this section allows members to search for playgroups in their zip code as well as view three corresponding lists: all groups, those that were recently added and a list of the user’s current group memberships. From this page, members can also create a new playgroup using the consistent “add new” button.
Activity Centers: Of almost equal importance to the playgroups content is our list of available activity centers – locations where groups can meet and play (aside from member homes). Members can create events at a particular center, and manage all aspects from their group’s homepage.
Restaurants: This section provides access to “kid-friendly” restaurants that have been submitted and rated by other members. Again, the content is searchable, and displayed in three formats: complete list, recently added and highest rated.
Activities: Similar to the restaurants content, this section displays activities that playgroups can leverage during their sessions. Members can search via context or age group, as well as view a complete, recently added or highest rated list.
Articles / Tips: Both of these areas provide useful playgroups (and parenting) advice for our members. The contents can be voted on, and following suit with the other content types, is context searchable and listed in several formats.
News / Coupons: These two sections leverage the default Drupal Feed Aggregator module. By pulling in specific parenting / playgroup related RSS content, I was able to create two areas with virtually no effort on my part.
Contributed Modules
As most new Drupal users fall victim to "module overload", I set an objective to limit my number of active mods to fifty or less. This is by no means a comprehensive list, but I think represents a broad spectrum of modules in use on the site:
- Activity (OG Activity, User Activity, Flag Activity): keeps track of and displays all user activity on the site, for other members to view
- CCK: absolutely essential, and used in the creation of our numerous custom content types
- Calendar / Event (Calendar Signup): enables members to register for group related activities
- Flag: members can flag content (positive and negative), as well as bookmark content for future reference
- ImageCache: several of our content types allow for associated images, and this module provides the necessary resizing
- Location (GMap): pivotal module, as the focus of WePlaygroup is location based search and content creation
- Organic Groups: as mentioned before, this was the entry point for our project, and the rest of the site was developed around this module
- Panels: controls several of the “content-heavy” pages, such as the user’s homepage
- SEO Checklist: as the name implies, this provides a pretty concise means of following Search Engine Optimization best practices
- User Relationships: we had intended for the site to be “friend driven”, and as such, needed a means for members to easily become friends
- Views: another undeniably essential module, used in the creation of virtually every page of the site
- Voting (Fivestar): as a community centric site, having the means for members to rate other member content was crucial
Some other very noteworthy modules in use are: Aggregator, Fbconnect, Content Profile User Registration, Messaging / Private Messages, Notifications, Pathauto, Thickbox, Watcher, CAPTCHA, Google Analytics, XML Sitemap.
Hosting
After much debate and forum scouring, I settled upon Linode.com as my host. This was in part due to the affordable price point, but also the broad access to the environment you’re given with a hosted account. I knew fairly early on that Drupal was a resource intensive CMS (I’m not entirely sure there is a viable CMS that isn’t to be honest), so I wanted to make sure I had some good performance for the initial launch, and early part of the website’s lifecycle.
The downside was that I was far from a bona fide sysadmin, and knew next to nothing about Linux environments. Thankfully the Web is teaming with helpful tutorials, and equally helpful individuals who are all too happy to assist in the development of an efficient environment. Linode themselves have some wonderful tutorials, and those, coupled with some incredibly helpful Drupal folks (http://groups.drupal.org/node/25425) made setting up my new server almost painless.
Now the current environment is far from optimal, and I have no illusions that I could handle the "Slashdot effect", but I am confident that my host can grow with my needs. This, along with Linode’s recently launched backup/recovery solution made my hosting decision all the more acceptable.
Conclusion
I am honestly amazed at the power and simplicity of Drupal. Let me re-phrase that – the power and simplicity, once one has become immersed in the Drupal lingo. The learning curve may have initially been steep, but the rewards far exceeded my expectations. Drupal is an extremely versatile CMS, with a very robust and supportive user community. To everyone who has contributed, and to those who tirelessly support the community, my hat is off to you all!
Comments
City search
In addition to zipcode search, it would be good to have a city search.
http://www.weplaygroup.com/centers
thanks... i'd considered that
thanks... i'd considered that during the initial setup, and agree that that would enhance the search capabilities...
i had left it with zipcode for the release as it seemed like a common denominator type of location search...
yes!
That's exactly what I was thinking... Depending on where I am, I don't even know my zip
Fabulous. You've thoroughly
Fabulous. You've thoroughly succeeded in the most difficult thing which is an attractive, easily navigable site.
Now, if you asked me what could be improved, I'd say that each page looks the same - it would be preferable to arrange the content in more varied ways than the list format - one obvious place that this could be employed would be at http://www.weplaygroup.com/classifieds which could be spread across more columns, (perhaps even using a gallery-style view) and have icons (see http://www.gumtree.com).
And also the other thing is that there are no images, which help to engage people in the content. You have an image for this center, http://www.weplaygroup.com/centers/690 - so why not display the thumbnail on this page: http://www.weplaygroup.com/centers
This article could definitely benefit from an image - http://www.pitara.com/activities/craft/online.asp?story=103. I'm not sure of the law in the States regarding editorial use of images, but since you link to their site I would imagine that fair usage would apply - or you could take pictures yourselves, not practical if you're adding hundreds of items a month but could be if it's only a few.
A step further could be to use Location to have your users enter their location and then to show other users nearby?
This is just what struck me, I hope you find this helpful.
Best wishes
Tony
Excellent feedback... thanks
Excellent feedback... thanks Tony!
All valid points to be sure. I especially like your suggestion about adding thumbnail images (when available) for centers (which could extend to playgroups as well). Definitely adds a visual element to those otherwise boring lists. ;)
As for your last point about near by users, thats actually available from the member's homepage. One of my right-hand column blocks is "near-by moms" which uses the proximity search to locate zip codes within 25 miles of the user. The results show the mom's name, zip and distance from the member.
But I have been toying with the idea of adding users to the results of the main site search. My only concern is over member privacy. As part of the registration process, members need only provide a zip (no other address details), but I'm not sure how it would be received to see your name show up on the primary search page.
As it stands now, only a member with a zip code within 25 miles will be able to "see" you on their own homepage.
But you've definitely given me some food for thought.
Thanks!
Steve
It's obviously a very
It's obviously a very sensitive site regarding privacy -
a couple of options could be that you don't actually display the zip and just have 'users within 25 miles'
another could be that you encourage your users to have anonymous user names and finally you could allow them to
opt out (or in) from that list with a check box on sign up and then just add that check box's output to the filter for
the block in views. Or, get them to enter zip for search purposes but just display City. I guess just ask your
users what they would and wouldn't feel comfortable about and give the minority the option to opt out - and I suppose
there may be some who wouldn't want their zip displayed at all.
It's a tricky one, best of luck!
Again, good points. To date
Again, good points. To date we havent had any complaints (or any comments at all with regards to zip codes or privacy).
But giving users more options is always a good thing. :)
I took your suggestion, and
I took your suggestion, and implemented Playgroup and Activity Center images on their associated list pages. I thought it worked out quite well, and have already received positive feedback from some of our mommies.
Thanks!
Steve
Which Linode?
Hi Steve,
Great site by the way. I have known about Drupal for a while but can't really call myself a competent drupal developer. In essence I am a newbie and I am trying to create a site by the end of this year and have decided to use Linode also. I have a couple of questions:
1 - Please what Linode are you using 512, 768 or 1024?
2 - What tutorials did you read to learn about Linode's linux environment and install your site successfully, I don't know anything about linux but I really want to use Linode?
Thank you for telling us about your site and well done for the good work.
1) i decided to go with a 512
1) i decided to go with a 512 initially, and will upgrade as traffic demands... the linode interface (and service in general) is a real treat... even for a novice, things like adding additional disk space or memory are painfully easy
2) as for setting up the environment, i simply used my new environment as a test bed... there really is no other way to understand how things work until you read up a bit, and just start "breaking things"... :) Linode does have a fantastic library (http://library.linode.com/) and the folks on their forums (https://www.linode.com/forums/) and IRC chat (https://www.linode.com/irc/) are extremly helpful...
my advice would be to find a few very basic "what is linux" tutorials, just so you become familiarized with some of the lingo, etc. then setup a hosting environment for a month ($20 to test the service and your budding skills is cheap imo)...
once you have your test environment, use the beginner's guide (http://library.linode.com/beginners-guide/) and just baby-step from there... once you start to get a feel for setting up and working in the environment, you can move on to more advanced configurations like the one i referenced in my writeup...
good luck!
Thanks Steve
Great advice. I will do as you say.
I tried Linode but gave up. I
I tried Linode but gave up.
I decided to go with a managed vps and can always change, though it is nice to have someone willing to answer questions.
Chose vpslatch.com but just started so no review.
Excellent job! I love what
Excellent job! I love what you've done.
I have some questions about the carousel: you used your own custom jQuery to create the carousel on the front page? Any tips or links you could direct me to toward the goal of creating one myself? Is the carousel content fixed, or is the client able to update the displays themselves? Thanks!
the frontpage is really an
the frontpage is really an island unto itself... :)
it has its own moo stylesheet, and other unique properties (including calls the the moo specific js required for the carousel)...
the body of the page houses the specific carousel content:
Thanks for taking the time to
Thanks for taking the time to explain!
The 'activity center' and
The 'activity center' and 'restaurants' are custom content type ?
yes, they are custom content
yes, they are custom content types... actually, the majority of the content is custom: playgroups, activity centers, activities, articles, tips, restaurants
news, classifieds and coupons are generated via feeds and other means...
Thanks & pls explain on user login redirect...
Thanks for sharing your development process and modules you have used. Can you explain how you did the redirect of /user to /user/login ?
Thanks in advance.
With regards
Mohan
that was simply done via URL
that was simply done via URL alias... took the default user path, and added the alias of user/login... :)
Not working
i have added URL alias from /user to /user/login but its not working. Is there something other thing i have do?
hmm... I dont recall having
hmm... I dont recall having to do anything "special" for that alias to work...
let me take a closer look though...
Great Info
I think it's great when a site developer takes the time to explain how they ended up using Drupal to meet their own site's needs. It saves other people valuable time when they can see how someone else tackled a similar problem, so they don't need to "reinvent the wheel".
As far as your site is concerned, one thing that I'm particularly impressed by is your site's page loading speed. I use a Linode 512 myself, so it was good to see that a site as fast as yours does as well. I also really liked how "clean" your site design looks; for example, the registration form and individual restaurant pages are pretty sleek.
If I had to point to anything that you might be able to improve, I'd have to agree with someone above who commented about using thumbnails (or maybe just icons) to make some of the lists more visually appealing. For example, http://www.weplaygroup.com/resources/restaurants might look even better with icons to signify what kind of restaurant it is. The list right now kind of reminds me of a list of forum topics.
thanks for the compliments!
thanks for the compliments! :)
and i like your suggestion for the restaurants section... while users can submit images for a restaurant (they can create entire galleries actually), i like the idea of having a more generic icon for the type of restaurant...
i'll definitely look into implementing something like that... thanks!
Simply a great post Steve,
Simply a great post Steve, thank you so much for sharing your experiences with the community. ^.^ Not much else to say other than that you've managed to create a content rich site, with a clean but lovely looking design. I wish you and your project the best of luck for the future. :)
thanks... it was my pleasure
thanks... it was my pleasure putting together the writeup... :)
Hey Steve, Just wanted to add
Hey Steve,
Just wanted to add to the congratulations on the launch of this site. You've done a great job, the look is very appealing and I've added it to my favorites being a father myself. Hope you have great success with this venture!
Cheers,
Gene Bernier
Gene Bernier
gene@cheekymonkeymedia.ca
COO, Top Monkey Wrencher
Cheeky Monkey Media
http://cheekymonkeymedia.ca
Site looks nice (I like the
Site looks nice (I like the use of the Calvin and Hobbes font). I personally think its a little sexist to limit it to mothers only. Plenty of stay at home / single parent dads out there.
yes, that font was a real
yes, that font was a real find... :)
and my apologies for the apparent sexist slant... it certainly wasnt my intent (given that I'm a father of two, and can appreciate all thats required to stay at home with the kids)... it was really more of an 80/20 approach to targeting an audience...
the majority of of parents who stay home, or who spent most of their time with the children during the day are moms... and of the percentage of parent who stay home (moms and dads) the overwhelming majority of those who actively participate in playgroups are moms...
but we do have (and most certainly welcome) our stay at home dads!! :)
Great site, how did you
Great site, how did you realise the "At a glance" part of e.g. Centers? Is this done with panels?
Regards,
Tobi
thats handled with some PHP
thats handled with some PHP on my node-activity_center.tpl.php page...
Great, thanks for sharing!
Great, thanks for sharing!
Completely agree
"I am honestly amazed at the power and simplicity of Drupal. Let me re-phrase that – the power and simplicity, once one has become immersed in the Drupal lingo. The learning curve may have initially been steep, but the rewards far exceeded my expectations.".
I'm completely agree with those words. I'm on my first (but serious) Drupal projects and that's my feelings; after 1 year deeping insigh Drupal literature (Packt books, module developments and so on), now I see all the posibilities Drupal gives you and I'm convinced that I've came to a amazing web framework.
I like you project and the theme is quite nice.
Question: how did you introduce the "view all" link in each block?, did you find a general method to do it? ;-)
Thanks to share.
this was typically handled in
this was typically handled in the individual view blocks, using some PHP in the Footer section for the individual view:
Thanks
Ah!, so easy!
location
I am curious if you looked at other modules for location? How you made the decision?
Thank you.
No, I went with Location and
No, I went with Location and GMAP right from the start. They provided exactly what we were looking for, and the only tweak I had to make was with regards to User Proximity (oh, and modifying the UK section a bit as well).
Thanks, I think location and
Thanks, I think location and proximity are hot topics!
I am making a lost and found pet web site and hope it becomes as appealing as yours!
Feed result display
I found this to be a very interesting concept and wish you good luck
Can you describe how the five
Can you describe how the five images in the upper right hand corner (with the pause / advance buttons) were installed?
Great way to highlight lots of content in a small space. I use a similar thing for photos. I have seen lots of image modules but that looks very clean and elegant.
Was there any trick to designing the actual panels themselves? Any tips would be great. Thanks.
thanks! I touch on that a few
thanks! I touch on that a few post up (with some sample code), but basically the process is handled with jQuery and mootools... i loaded the specific .js and .css files required, and then simply created my custom content sections... simple! :)
How have u implemented " My Friends " quicktab in use profile
Hi,
Congratulations Weplaygroup.com. Nice job.
I am trying to implement a view of type BLOCK, that will show current logged in User's Friends. Not succeed yet.
Will you help me out.
Thanx in advance!
thats all handled using the
thats all handled using the User Relationships module, and a fairly involved View...
here are some of the settings from my view - hopfully they will help get you started!
its working. ... but partially
Hi steveadamo,
Thanx for your help. appreciated!
The view you shown here is working. But it only fetch first record (friend).
Ultimately, the 'view' I have created shows only one friend repeatedly.
I have set Option Distinct to "Yes". But still the same result.
How do I achieve "My Friends"?
Very nice theming...
Great site!! Nice theming!!
I am pretty new to drupal. I like the slide show at the front page. What is that? Is it a ready made module or custom made?
Thanks
Shriji
NEW MODULE
I am not the author, but I did ask the same question.
Look for the word carousel above it is mentioned a few times.
I think we all want a new module!!!!
its "custom made" in the
its "custom made" in the sense i didnt use an existing module... but i did capitalize on the moo tool set! :)
i simply created my own custom block on the frontpage, but it really was rather painless...
I looks very classy
Congratulations. Your site shows attention to detail.
Question: I just started the process myself of designing/constructing a site using Drupal. If I understood correctly you started with very basic knowledge, same here. How long did the entire process take?
Cheers,
Eduardo
San José, Costa Rica
thanks... i did indeed start
thanks...
i did indeed start the process as a complete novice... i picked up a few books, read a host of tutorials, and then just dove in headfirst... there really is no better way to understand a system... create content, add modules, view source, play with CSS, see what works, and what breaks! :)
all told, the process probably took me about 12 months (from concept to "launch")... with a fairly even mix of time spent in the initial "how does this work" phase, and the "i have my site, now i need to add some polish" phase... it could have gone much quicker had this been a full time endeavor, but i had to work on it during my spare time - most of which was on the bus to and from work... i suppose thats a good testament for Drupal... :)
Muy bueno
Me parece un buen sitio con excelente diseño
How have you created views?
Hi All,
How have you created views to display my group, my profile.
Which argument are you passing to see particular user's profile in QuickTab ?
Thanx In Advance !!
this was a little tricky (for
this was a little tricky (for me at least)... using "my friends" as an example, its a view (user_relationships_browser) inside a quicktabs tab (My friends)... under arguments, i pass in %1 (which is read as the userID)
the view is pretty involved, but here are a few of the key parts:
Hi steve, i am curious to how
Hi steve,
i am curious to how you configured the 'user' page so, that when you enter it, it doesn't automatically
activate the 'view' account page.
In other words, when i click on 'my home' the path is users/% but instead of viewing the account page,
i am seeing the first page of you QTblock and none of the links above it are activated.
This makes it a very nice and ordered user experience!
that path resolves to a
that path resolves to a single column panel page (user/%), with 6 pieces:
1 - user_profile_picture_block (custom view that shows the user's picture, and basic details like "last on", etc.)
2 - Facebook-style Statuses
3 - User Profile - My Settings (custom php block with the home page links like "my bookmarks", etc.)
4 - UserProfile (the is the quicktabs section)
5 - Guestbook
6 - Friendship (custom php block to check for existing relationship with the viewing user, and adjust the homepage accordingly)
Carousel alternative
Anyone looking for a carousel module like the beautiful one in this site, check out the Slider module.
http://drupal.org/project/slider
It is relatively easy to install.
Installation note - There are two content types, one containing the actual content and the other referencing the actual content - mentinoning this because the installation instructions were confusing to me.
Changing width / height requires a bit of custom css.
I have chosen to go with Display Block which is much more complicated but more features.
Thanks!
Thanks for the detailed walkthough. I have been working/thinking on a site for about 3 months that has very similar characteristics but different content. It really helps to be pointed in the right directions. There are so many module to comb through that list alone will give me a leg up.
ROD>
How have you created footer menu
Hi,
I am trying to create the same kinda footer menu in my site. How have you created this in your site ?
there's nothing really
there's nothing really special about the setup... just some simple CSS... :)
sample CSS:
here is a sample of the block:
thanx steve
thanx steve
I instead created a menu from
Hi,
I instead created a menu from admin/build/menu. And checked each parent item "Exapanded". Which gives me a complete expanded menu.
After I applied a simple style to each li expanded
That worked for me to display Expanded Footer Menu
a very interesting and
a very interesting and practical approach! :)
what module do you use for
what module do you use for classifieds ? Great site and beautiful design.
the very simple to use
the very simple to use Classified Ads module... here you go... :)
http://drupal.org/project/ed_classified