FoodGradient – Blog z dobrym jedzeniem

Kolejny projekt w którym brałem udział. Blog kulinarny 😉 Od początku założeniem tego projektu było, że musi być nieszablonowy, skrojony na miarę, szybki i responsywny. Front zaprojektował i stworzył mój kolega Janek (https://janpodgorski.com/) natomiast ja miałem się zająć tak zwanymi „bebechami”. Oprócz samej warstwy backend’owej, napisałem również trochę frontu do obsługi filtrowania oraz wyświetlania listy przepisów. Zobaczcie co z tego wszystkiego wyszło.

Założenia

Strona musi działać szybko, być łatwo rozwijalna i móc z łatwością skalować się w przyszłości więc pchanie się w jakieś wordpressy z dziesiątkami wtyczek nie wchodziło w grę. Dodatkowo całość musiała posiadać tłumaczenia i być łatwa w użytkowaniu i przyjazna użytkownikom. Jednym z założeń było również to, aby wyszukiwarka działa w sposób minimalizujący sytuację w której użytkownik nie znajdzie interesującego go przepisu. Oczywiście w kodzie znajdziemy również dane strukturalne zgodne ze schema.org.

Co jest, a czego nie widać?

Całość została napisana w pythonie i oparta na frameworku Django. To lista rzeczy które zastosowałem:

  • Redis – jako cache dla całych stron lub ich fragmentów
  • PostgreSQL – jako baza danych ale również silnik napędzający full text search z autocomplete
  • Cron – Dla zadań wewnętrznych, takich jak powiadomienia o komentarzach czy wysyłka maili
  • Phusion Passenger – do automatyzacji uruchamiania aplikacji
  • Fabric – do automatyzacji deploy’u
  • Git – kontrola wersji
  • VueJS – dla usystematyzowania kodu listy przepisów oraz jej filtrowania
  • Kompresję obrazków do formatu WebP aby ograniczyć transfer

Co można było zrobić inaczej?

Jak to w życiu, jest wiele dróg 😉 Każdy programista zapewne zrobi inaczej. W tym projekcie mieliśmy ograniczoną ilość czasu na start (na stworzenie i wdrożenie nowej wersji bloga) dlatego zrezygnowaliśmy z większych rozwiązań takich jak ElasticSearch (jako silnik wyszukiwania), czy Celery (do zadań asynchronicznych). Uważam, że zawsze trzeba dostosować technologie do potrzeb. Oczywiście nie zamykając sobie drogi do późniejszego rozwoju projektu.


Photo by Lukas Tennie on Unsplash