Jak zrobić startup w dwa i pół tygodnia?
Słowo wstępu — będąc na urlopie odwiedziłem rodzinne strony. W międzyczasie wylegiwania się na słońcu i robienia kilometrów na rowerze, namówiłem moją mamę do zmianę podejścia do publikacji treści w Internecie. Ma ona dużo pomysłów, content generuje ciekawy i unikalny, po różnych stronach go rozmieszcza, ale nie ma z tego żadnych korzyści. Wszystko co publikuje w różnych serwisach jest własnością tych serwisów. Strata czasu. Postanowiliśmy, że podzielę się moim hostingiem, na którym mam dużo wolnego miejsca i będzie mogła sobie zacząć w normalny sposób blogować — w Wordpressie. Musiałem tylko wymyślić nazwę domeny... I wymyśliłem. 
W sobotę 31 lipca kupiłem domenę chwila-dla-siebie.pl. Coś poszło nie tak i strefa w DNSie po stronie panelu administracyjnego mojego providera się nie utworzyła jak należy. Konfiguracja DNS'ów musiała więc poczekać do poniedziałku, kiedy ostatecznie zgłosiłem błąd i został on rozwiązany ręcznie.
Pomysł i realizacja
Kiedy oczekiwałem na dostęp do strefy, przypomniało mi się, że 10 lat temu pewien człowiek na swojej stronie z przepisami kucharskimi obwieścił wszem i wobec, że stronę zamyka, zabiera swoje wiaderko, grabki i opuszcza piaskownice. Stwierdziłem wtedy, że szkoda, żeby się to wszystko zmarnowało, bo korzystałem z tej strony czasami. Cała strona przeleżała u mnie w archiwach jakieś 10 lat. Jako dodatek do bloga, stwierdziłem, że taka strona z przepisami będzie strzałem w dziesiątkę... i zacząłem pisać... 
Po ponad dwóch tygodniach aplikacja prezentuje się następująco:
Poniżej zamieszczam loga dzień po dniu jej tworzenia
dzień 1, niedziela
- Napisałem pierwotną wersję parsera do przepisów, analizujący dokumenty html i wypluwający łatwiejsze do przetwarzania za pomocą wyrażeń regularnych pliki tekstowe. Okazało się, że dysponuję 6182 przepisami.
- Przygotowałem sobie szkielet aplikacji. Wykorzystałem do tego kod mojego bootstrapa Django / JavaScript / CSS (link do opisu na innym moim blogu, w języku angielskim) — zwłaszcza Buildera JavaScript. Dla interfejsu użytkowników wykorzystałem mój bazowy template — z layoutem pionowym (nagłówek, treść, stopka).
dzień 2, poniedziałek
- modele — przygotowałem modele dla kategorii i przepisów i spędziłem trochę czasu na dopracowanie wyświetlania tych informacji w panelu admina Django.
dzień 3, wtorek
- Zdeployowałem aplikację na serwerze. Przygotowałem konfigurację serwera www, wrzuciłem sztampowe template'y do wyświetlania błędów. Aplikacja póki co działała na screenie, a serwer WWW obsługiwał zapytania jako reverse proxy.
dzień 4, środa
- Dodałem layout poziomy (kategorie, przepisy, sidebar). Strona dostosowuje swój rozmiar do szerokości okna przeglądarki, chyba, że jest ona mniejsza niż zadeklarowana minimalna szerokość.
dzień 5, czwartek
- Napisałem sobie kod do obsługi paginatora przepisów i opisałem to w poprzednim wpisie
dzień 6, piątek
- Zaimplementowałem wyświetlanie kategorii, paginację przepisów i wyświetlanie konkretnego przepisu.
dzień 7, sobota
- Napisałem obsługę wyszukiwania przepisów. kod póki co nie jest specjalnie wydajny, ale został napisany tak, aby zastosowanie cache'owania było proste.
- Zrobiłem też prosty, brzydki design dla layoutu. Jakieśtam obrazki, żeby strona nabrała kształtów, które mnie osobiście dają motywację do dalszej pracy.

dzień 8, niedziela
- Dodałem templatkę do dodawania przepisów i jej obsługę, następnie uzupełniłem obsługę o mailowanie do mnie przez aplikację informacji o nowym przepisie.
- Dodałem do przepisu przyciski "lubię to" z Facebooka i "dodaj na Śledzika".
dzień 9, poniedziałek
- Trochę się przyłożyłem, pomyślałem i narysowalem nowy design dla layoutu. Narysowałem kilka podstawowych backgroundów i ustawiłem je w css'ie. Wyszło wystarczająco zadawalająco, żebym mogło tak zostać

dzień 10, wtorek
- Podzieliłem logo na dwie części i poprawiłem je od strony kodu — chciałem aby po wyłączeniu styli, dokument wyglądał tak jak powinien (tagi h1).
- Dodałem model News'ów, dodałem możliwość edycji do interfejsu Django Admin, news początkowo wpisany w templatkę przeniosłem do skryptu inicjalizującego bazę, a do templatki wstawiłem kod wyświetlający Newsy z bazy. To akurat pamiętam, bo całe mieszanie z newsami zajęło mi tyle ile trwały Fakty na TVN'ie

- Zrobiłem trochę porządków w modelach, dodałem obsługę vars'ów i memcache, również z mojego frameworka, które wcześniej uznałem za tymczasowo zbędne.
dzień 11, środa
- Wyczyściłem bazę i zaimportowałem ponownie przepisy. Założyłem też konto mojej koleżance (którą z tego miejsca gorąco pozdrawiam
), która pomogła mi tego dnia sprawdzić 150 przepisów 
- Dodałem osoby które to lubią z Facebooka (ta większa wersja, z ryjkami) do strony głównej.
dzień 12, czwartek
- Dodałem funkcjonalność zapisywania historii zmian w przepisach z interfejsem dla superusera w Django Adminie, umożliwiającym przeglądanie wprowadzonych zmian i ich cofania (Undo).
dzień 13, piątek
- Zarejestrowałem się w jednej z sieci afiliacyjnych, a następnie w jednym z programów partnerskich. W międzyczasie weryfikowaliśmy kolejne przepisy, których było już 320.
- Dodałem reklamę z Google Adsense, przycisk "Share" z Facebooka.
- Wrzuciłem też na stronę favicona.
dzień 14, sobota
- Weryfikacja kolejnych 100 przepisów.
- Usunąłem z głownej Facebookowe osoby które to lubią, założyłem kuchni stronę na Facebooku i dodałem "Like Boxa" do ów Facebookowej strony.
- Dodałem do strony kod śledzenia Google Analytics oraz dodałem stronę do Google Webmaster Tools
dzień 15, niedziela
- Zmieniłem obsługę aplikacji przez serwer WWW, obecnie pracuje jako wsgi. Bawiłem się też w zmienianie Suzuki Hayabuzy we włochatego potwora w Gimpie (efekty pracy udostępnione na moim profilu Facebookowym
)
dzień 16, poniedziałek
- Gimp i przygotowanie trzech obrazków reklam do sidebara. Wrzuciłem obrazki na serwer, przygotowałem szkielet modułu adbox, który zawierał tablicę z reklamami i parametrami ich wyświetalnia i zaimplementowałem statyczne wyświetlanie losowej reklamy z tablicy.
dzień 17, wtorek
- Napisałem fadera do reklam w javascripcie, który dzięki wspomnianemu na początku bootstrapowi, eksportował mi je z pythona za pomocą jsona do javascriptu, automagicznie się includował, rozpoznawał które to reklamy ma animować, a następnie je animował
Chodziło mi to po głowie od jakiegoś już czasu, coś podobnego ma Allegro na głównej.
A tymczasem...
W międzyczasie oczywiście chodziłem do pracy i robiłem tam inne rzeczy. Musiałem też trochę czasu poświęcić mojemu samochodowi, który w trakcie tych dni ucierpiał przed parkingiem pod pracą, bo w moje drzwi wjechało Mondeo. Spisywanie, telefony, oględziny, lakiernik, pisma itp. Straszne pożeracze czasu. No ale dałem radę.
Acha, i spałem. 
Startup nie startup
Zdaję sobie sprawę, że specjaliści od Web 2.0 i social networkingu, np. Grzegorz Marczak z Antyweb'a prawdopodobnie mieliby zastrzeżenia do określania tej aplikacji mianem startupu, a gdyby miał go na swoim blogu opisywać, zebrałbym jako autor więcej batów niż ta aplikacja ma linijek kodu, ale co tam.
Wszystkich Was na stronę aplikacji serdecznie zapraszam — jest ona dostępna pod adresem kuchnia.chwila-dla-siebie.pl (oraz jako skrót z tej domeny: nme.pl/kuchnia).
W następnym wpisie przedstawię jak wygląda obecna konfiguracja panelu Django Admina aplikacji.





