Przejdź do treści

Katalog rozszerzeń Raycast z podziałem na kategorie

Okno terminala - projekt deweloperski po godzinach

TL;DR

Diagnoza

Sklep rozszerzeń Raycasta ma ponad 1700 pozycji i żadnego sensownego sposobu, żeby je przeszukać: bez kategorii, po 10 wyników na stronę. Mogłem to obejść, pobierając dane prosto ze strony (web scraping). Nie chciałem jednak łamać regulaminu ani opierać się na czymś, co posypie się przy najbliższej zmianie wyglądu strony. Znalazłem więc oficjalne repozytorium na GitHubie, w którym Raycast trzyma dane wszystkich rozszerzeń. Zrobiłem forka i napisałem wokół niego skrypt, który pobiera dane, kategoryzuje je przez GPT i publikuje gotowy katalog jako README.

flowchart TD
    subgraph Przed["Przed"]
        A1["Szukasz rozszerzenia<br/>w sklepie Raycast"] --> A2["Brak kategorii,<br/>10 wyników na stronę"]
        A2 --> A3["Przewijasz strony<br/>albo zgadujesz nazwę"]
    end
    subgraph Po["Po"]
        B1["Fork repo raycast/extensions<br/>+ skrypt scalający dane"] --> B2["Kategoryzacja<br/>przez OpenAI API"]
        B2 --> B3["Katalog na GitHubie,<br/>18 kategorii"]
    end

    classDef good    fill:#e6f2ea,stroke:none,color:#1f4d33,rx:14,ry:14
    classDef bad     fill:#faeaea,stroke:none,color:#5f2626,rx:14,ry:14
    classDef accent  fill:#27272a,stroke:#3f3f46,stroke-width:1px,color:#fafafa,rx:14,ry:14
    class A1,A2,A3 bad
    class B1,B2 good
    class B3 accent
    style Przed fill:#fdf5f5,stroke:#e0c3c3,stroke-width:1px,color:#5f2626,rx:14,ry:14
    style Po fill:#f2f8f3,stroke:#c2dcc8,stroke-width:1px,color:#1f4d33,rx:14,ry:14
    linkStyle default stroke:#a8a8b3,stroke-width:1.5px

Co zrobiłem

Wyniki

MetrykaWartość
Rozszerzenia skategoryzowane1716
Kategorie18
Gwiazdki na GitHubie600
Forki12
Aktywne utrzymanie~5 miesięcy (maj–wrzesień 2024)

Problem

Dlaczego katalog rozszerzeń Raycast jest trudny do przeszukania?

Sklep nie ma porządnych kategorii, a na jednym ekranie pokazuje tylko 10 rozszerzeń. Przy ponad 1700 pozycjach trzeba przewinąć dziesiątki stron albo wpisać w wyszukiwarkę dokładną nazwę. A jeśli nie wiesz, czego szukasz (często tak jest, bo dopiero odkrywasz, co Raycast potrafi), nie masz jak sensownie przeglądać sklepu.

Dlaczego nie web scraping?

Bo to rozwiązanie kruche i na granicy regulaminu. Strona może się zmienić w każdej chwili i scraper przestanie działać. Nie chciałem też wyciągać danych z cudzej strony, skoro firma sama je publikuje. Oficjalne repozytorium na GitHubie, w którym Raycast trzyma package.json każdego rozszerzenia, dawało te same dane i mogłem na nim polegać.

Moja rola / zakres

Proces

Kluczowe decyzje i trade-offy

PodejścieRyzykoDecyzja
Web scraping strony Raycastłamanie regulaminu, kruche przy zmianie layoutuodrzucone
Fork oficjalnego repo GitHubzależne od struktury package.json w repowybrane

Jak to się skończyło

Repo ma 600 gwiazdek i 12 forków, ale ostatni commit to wrzesień 2024. Dziś jest zarchiwizowane. Oficjalny sklep Raycasta wciąż nie ma realnego przeglądania po kategoriach, tylko wyszukiwarkę i kilka linków w stopce, więc problem, który rozwiązywałem, nadal istnieje. Nie kontynuowałem, bo utrzymanie kategoryzacji obok pracy na etacie przestało się opłacać. Zakończyłem ten projekt świadomie.

Co z tego wyniosłem