Teksty zgodne z tym, co serwis naprawde robi
Deploy Polska Lokalnie / deploy (push) Successful in 11s

- /jak-sprzedawac: zamiast Google, Facebook Marketplace, "ponad 500 grup"
  i newslettera "do tysiecy subskrybentow" - lista ofert, mapa, podglad
  linku w komunikatorach (OgController) i platne wyroznienie.
- "Dodaj do 30 zdjec i film" -> 8 zdjec, tyle przyjmuje backend; wideo nie ma.
- "Pomocny asystent AI" -> poradniki, wycena i kontakt z obsluga.
- Zdania o "tysiacach kupujacych/czytelnikow/klientow" przepisane bez
  twierdzen o skali (10 miejsc).
- Ustawienia: przelaczniki maili, ktorych nikt nie wysyla (zapisane
  wyszukiwania, alerty, nowosci), nieaktywne z wyjasnieniem.
- "Zweryfikowana firma" -> "Adres e-mail potwierdzony" - bo tym to jest.
- Poradniki: "Powiazane oferty" prowadza do zapowiadanych wynikow,
  pasek "Popularne" do poradnikow, a nie do list ofert.
- Kafelek 360 na stronie glownej bez plakietki "Wkrotce" - spacer dziala.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-23 11:34:39 +02:00
parent 557c76257b
commit d6b6e3edd9
+70 -62
View File
@@ -689,8 +689,8 @@ const benefits = [
}, },
{ {
icon: 'chart', icon: 'chart',
title: 'Tysiące kupujących', title: 'Kupujący bez pośredników',
text: 'każdego dnia', text: 'piszą prosto do Ciebie',
}, },
{ {
icon: 'shuffle', icon: 'shuffle',
@@ -1118,7 +1118,7 @@ const sellSteps = [
{ {
icon: 'calculator', icon: 'calculator',
title: 'My wycenimy się resztą', title: 'My wycenimy się resztą',
text: 'Twoje ogłoszenie trafi do tysięcy kupujących', text: 'Twoje ogłoszenie trafia na listę ofert i mapę',
}, },
{ {
icon: 'message', icon: 'message',
@@ -1146,12 +1146,12 @@ const sellReasons = [
{ {
icon: 'target', icon: 'target',
title: 'Kupujący z całej Polski', title: 'Kupujący z całej Polski',
text: 'Docieramy do tysięcy osób każdego dnia', text: 'Ogłoszenie widoczne dla każdego, kto szuka w Twojej okolicy',
}, },
{ {
icon: 'spark', icon: 'spark',
title: 'Sprzedaż nawet w 7 dni', title: 'Bezpośredni kontakt',
text: 'Szybka sprzedaż dzięki dużej bazie kupujących', text: 'Kupujący pisze i dzwoni prosto do Ciebie, bez pośrednika',
}, },
{ {
icon: 'shield', icon: 'shield',
@@ -1161,35 +1161,31 @@ const sellReasons = [
{ {
icon: 'warning', icon: 'warning',
title: 'Wsparcie na każdym etapie', title: 'Wsparcie na każdym etapie',
text: 'Pomocny asystent AI prowadzi przez cały proces', text: 'Poradniki, wycena i kontakt z obsługą serwisu',
}, },
]; ];
// Tylko to, co serwis naprawde robi z ogloszeniem - bez integracji, ktorych nie ma.
const sellChannels = [ const sellChannels = [
{ {
icon: 'logo', icon: 'logo',
title: 'polskalokalnie.pl', title: 'Lista ofert',
text: 'Nasza strona', text: 'Wyszukiwarka i filtry',
}, },
{ {
icon: 'search', icon: 'pin',
title: 'Google', title: 'Mapa ofert',
text: 'Reklama Google', text: 'Widoczne w okolicy',
}, },
{ {
icon: 'message', icon: 'message',
title: 'Facebook', title: 'Podgląd linku',
text: 'Marketplace i posty', text: 'Zdjęcie i cena w komunikatorach',
}, },
{ {
icon: 'group', icon: 'star',
title: 'Grupy lokalne', title: 'Wyróżnienie',
text: 'Ponad 500 grup', text: 'Płatne miejsce na górze listy',
},
{
icon: 'mail',
title: 'Newsletter',
text: 'Tysiące subskrybentów',
}, },
]; ];
@@ -1201,8 +1197,8 @@ const sellFeatures = [
}, },
{ {
icon: 'camera', icon: 'camera',
title: 'Galeria zdjęć i video', title: 'Galeria zdjęć',
text: 'Dodaj do 30 zdjęć i film', text: 'Dodaj do 8 zdjęć nieruchomości',
}, },
{ {
icon: 'tour', icon: 'tour',
@@ -2138,8 +2134,8 @@ const addFooterBenefits = [
}, },
{ {
icon: 'group', icon: 'group',
title: 'Tysiące kupujących', title: 'Bez pośredników',
text: 'Twoje ogłoszenie zobaczą zainteresowani.', text: 'Kupujący kontaktuje się z Tobą wprost.',
}, },
{ {
icon: 'clock', icon: 'clock',
@@ -2219,24 +2215,29 @@ const quickGuides = [
}, },
]; ];
// Skroty do list ofert - kazdy prowadzi do wyniku, ktory faktycznie odpowiada nazwie kafelka.
const guideRelatedOffers = [ const guideRelatedOffers = [
{ {
title: 'Mieszkania w Krakowie', title: 'Mieszkania w Krakowie',
to: buyCityPath('Kraków'),
image: cityImage, image: cityImage,
position: '88% 56%', position: '88% 56%',
}, },
{ {
title: 'Mieszkania w Warszawie', title: 'Mieszkania w Warszawie',
to: buyCityPath('Warszawa'),
image: cityImage, image: cityImage,
position: '18% 48%', position: '18% 48%',
}, },
{ {
title: 'Nowe mieszkania', title: 'Wszystkie oferty sprzedaży',
to: ROUTES.buy,
image: cityImage, image: cityImage,
position: '74% 52%', position: '74% 52%',
}, },
{ {
title: 'Okazje cenowe', title: 'Oferty wynajmu',
to: ROUTES.rent,
image: heroImage, image: heroImage,
position: '47% 58%', position: '47% 58%',
}, },
@@ -6558,7 +6559,7 @@ function AccountSidebar() {
<strong>{getDisplayName(user)}</strong> <strong>{getDisplayName(user)}</strong>
<small>{user?.email}</small> <small>{user?.email}</small>
<em className={user?.verified ? 'verified' : 'pending'}> <em className={user?.verified ? 'verified' : 'pending'}>
{user?.verified ? 'Zweryfikowane konto' : 'Oczekuje na weryfikację'} {user?.verified ? 'Adres e-mail potwierdzony' : 'Potwierdź adres e-mail'}
</em> </em>
</div> </div>
</div> </div>
@@ -10512,6 +10513,9 @@ function toSearchPreferences(settings: UserSettings): SearchPreferences {
const OTP_RESEND_COOLDOWN_SECONDS = 60; const OTP_RESEND_COOLDOWN_SECONDS = 60;
// Pojedynczy wiersz z przelacznikiem. Zapis idzie na serwer od razu po kliknieciu. // Pojedynczy wiersz z przelacznikiem. Zapis idzie na serwer od razu po kliknieciu.
// Powiadomienia, ktorych serwis jeszcze nie wysyla - przelacznik jest nieaktywny i mowi wprost dlaczego.
const SETTINGS_NOT_SENT_YET = 'Wkrótce - tych wiadomości jeszcze nie wysyłamy.';
function SettingsToggleRow({ icon, label, hint, checked, disabled, onChange }: { function SettingsToggleRow({ icon, label, hint, checked, disabled, onChange }: {
icon: string; icon: string;
label: string; label: string;
@@ -11825,20 +11829,24 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences
<p>Wybierz, o czym chcesz otrzymywać wiadomości.</p> <p>Wybierz, o czym chcesz otrzymywać wiadomości.</p>
</div> </div>
{/* Wlaczone jest tylko to, co serwis naprawde wysyla. Reszta czeka na zbudowanie
funkcji - lepiej powiedziec to wprost, niz pozwolic wlaczyc martwy przelacznik. */}
<div className="settings-list compact"> <div className="settings-list compact">
<SettingsToggleRow <SettingsToggleRow
icon="bell" icon="bell"
label="Nowe oferty z zapisanych wyszukiwań" label="Nowe oferty z zapisanych wyszukiwań"
checked={settings?.notifySavedSearches ?? true} hint={SETTINGS_NOT_SENT_YET}
disabled={isLoading} checked={false}
onChange={(next) => { void patchSettings({ notifySavedSearches: next }); }} disabled
onChange={() => { /* funkcja jeszcze nie powstala */ }}
/> />
<SettingsToggleRow <SettingsToggleRow
icon="trend" icon="trend"
label="Alerty cenowe" label="Alerty cenowe"
checked={settings?.notifyPriceAlerts ?? true} hint={SETTINGS_NOT_SENT_YET}
disabled={isLoading} checked={false}
onChange={(next) => { void patchSettings({ notifyPriceAlerts: next }); }} disabled
onChange={() => { /* funkcja jeszcze nie powstala */ }}
/> />
<SettingsToggleRow <SettingsToggleRow
icon="message" icon="message"
@@ -11850,9 +11858,10 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences
<SettingsToggleRow <SettingsToggleRow
icon="gear" icon="gear"
label="Nowości i aktualizacje serwisu" label="Nowości i aktualizacje serwisu"
checked={settings?.notifyProductNews ?? false} hint={SETTINGS_NOT_SENT_YET}
disabled={isLoading} checked={false}
onChange={(next) => { void patchSettings({ notifyProductNews: next }); }} disabled
onChange={() => { /* funkcja jeszcze nie powstala */ }}
/> />
<SettingsToggleRow <SettingsToggleRow
icon="mail" icon="mail"
@@ -13002,7 +13011,7 @@ function LoginPage({ onLogin }: { onLogin: (user: AuthUser) => void }) {
<span><Icon name="check" /></span> <span><Icon name="check" /></span>
<p> <p>
<strong>Zaufany serwis</strong> <strong>Zaufany serwis</strong>
<small>Tysiące użytkowników ufa nam w znalezieniu idealnego mieszkania.</small> <small>Ogłoszenia bez prowizji, wprost od właścicieli.</small>
</p> </p>
</article> </article>
</div> </div>
@@ -13195,9 +13204,8 @@ function HomePage({ filters, onOpenMap }: { filters: FilterState; onOpenMap: (ci
<span className="tour-badge">360°</span> <span className="tour-badge">360°</span>
<span> <span>
<strong>Wirtualny spacer</strong> <strong>Wirtualny spacer</strong>
<small>Zobacz mieszkanie w 3D</small> <small>Gdy sprzedający doda spacer, obejrzysz go w ogłoszeniu</small>
</span> </span>
<em className="soon-tag">Wkrótce</em>
</aside> </aside>
</div> </div>
</section> </section>
@@ -13281,7 +13289,7 @@ function HomePage({ filters, onOpenMap }: { filters: FilterState; onOpenMap: (ci
<article className="free-card"> <article className="free-card">
<div> <div>
<h2>Dodaj ogłoszenie za darmo</h2> <h2>Dodaj ogłoszenie za darmo</h2>
<p>Dotrzyj do tysięcy potencjalnych kupujących. Bez prowizji. Bez zobowiązań.</p> <p>Wystaw ogłoszenie i rozmawiaj z kupującymi bezpośrednio. Bez prowizji. Bez zobowiązań.</p>
<Link className="free-card-cta" to={ROUTES.add}> <Link className="free-card-cta" to={ROUTES.add}>
<span>Dodaj ogłoszenie</span> <span>Dodaj ogłoszenie</span>
<strong>0 zł</strong> <strong>0 zł</strong>
@@ -14391,7 +14399,7 @@ function AddListingPage({ editListingId }: { editListingId?: number }) {
<h1> <h1>
Dodaj ogłoszenie <span>za darmo</span> Dodaj ogłoszenie <span>za darmo</span>
</h1> </h1>
<p>Wypełnij formularz i dotrzyj do tysięcy zainteresowanych.</p> <p>Wypełnij formularz, a ogłoszenie trafi na listę ofert i mapę.</p>
</> </>
)} )}
{!isEdit && categoryChosen && currentStep === 0 && ( {!isEdit && categoryChosen && currentStep === 0 && (
@@ -15056,7 +15064,7 @@ function AddListingPage({ editListingId }: { editListingId?: number }) {
<h2>Co dalej?</h2> <h2>Co dalej?</h2>
<div className="tips-list next-list"> <div className="tips-list next-list">
{[ {[
{ icon: 'check', title: 'Opublikuj ogłoszenie', text: 'Twoje ogłoszenie będzie widoczne dla tysięcy użytkowników.' }, { icon: 'check', title: 'Opublikuj ogłoszenie', text: 'Ogłoszenie pojawi się na liście ofert po akceptacji obsługi.' },
{ icon: 'message', title: 'Odbieraj wiadomości', text: 'Zainteresowani kupujący skontaktują się z Tobą przez formularz lub telefon.' }, { icon: 'message', title: 'Odbieraj wiadomości', text: 'Zainteresowani kupujący skontaktują się z Tobą przez formularz lub telefon.' },
{ icon: 'gear', title: 'Zarządzaj ogłoszeniem', text: 'W każdej chwili możesz edytować lub usunąć swoje ogłoszenie.' }, { icon: 'gear', title: 'Zarządzaj ogłoszeniem', text: 'W każdej chwili możesz edytować lub usunąć swoje ogłoszenie.' },
].map((tip) => ( ].map((tip) => (
@@ -16314,10 +16322,10 @@ function GuidesPage() {
</form> </form>
<div className="popular-links"> <div className="popular-links">
<span>Popularne:</span> <span>Popularne:</span>
<Link to={ROUTES.creditCalculator}>Kredyt hipoteczny</Link> <Link to={ROUTES.guideCredit}>Kredyt hipoteczny</Link>
<Link to={ROUTES.rent}>Umowa najmu</Link> <Link to={ROUTES.guideRent}>Umowa najmu</Link>
<Link to={ROUTES.sell}>Podatek od sprzedaży</Link> <Link to={ROUTES.guideLaw}>Podatek od sprzedaży</Link>
<Link to={ROUTES.guideBuying}>Księga wieczysta</Link> <Link to={ROUTES.guideLaw}>Księga wieczysta</Link>
</div> </div>
</div> </div>
</div> </div>
@@ -16402,14 +16410,14 @@ function GuidesPage() {
</section> </section>
<section className="related-offers"> <section className="related-offers">
<h2>Powiązane oferty</h2> <h2>Szukasz mieszkania?</h2>
<p>Zobacz mieszkania dopasowane do Twoich zainteresowań</p> <p>Przejdź prosto do ofert w wybranej lokalizacji</p>
<div className="related-offer-grid"> <div className="related-offer-grid">
{guideRelatedOffers.map((offer) => ( {guideRelatedOffers.map((offer) => (
<article key={offer.title}> <article key={offer.title}>
<div> <div>
<h3>{offer.title}</h3> <h3>{offer.title}</h3>
<Link to={ROUTES.buy}>Zobacz oferty <Icon name="arrow" /></Link> <Link to={offer.to}>Zobacz oferty <Icon name="arrow" /></Link>
</div> </div>
<div <div
className="related-offer-image" className="related-offer-image"
@@ -16429,7 +16437,7 @@ function GuidesPage() {
</div> </div>
<p>Masz wiedzę o nieruchomościach? Napisz własny poradnik i pomóż innym w podejmowaniu decyzji.</p> <p>Masz wiedzę o nieruchomościach? Napisz własny poradnik i pomóż innym w podejmowaniu decyzji.</p>
<div className="ai-question-box"> <div className="ai-question-box">
<strong>Twój artykuł trafi do tysięcy czytelników, a Ty zbudujesz swoją pozycję eksperta.</strong> <strong>Twój artykuł trafi do centrum wiedzy serwisu, a Ty zbudujesz swoją pozycję eksperta.</strong>
</div> </div>
<Link className="guide-ai-cta" to={guideAddPath()}> <Link className="guide-ai-cta" to={guideAddPath()}>
Napisz swój artykuł Napisz swój artykuł
@@ -16804,7 +16812,7 @@ const PROPOSE_STEPS = [
]; ];
const PROPOSE_BENEFITS = [ const PROPOSE_BENEFITS = [
'Dotrzesz do tysięcy czytelników', 'Twój poradnik trafi do centrum wiedzy',
'Zbudujesz swoją pozycję eksperta', 'Zbudujesz swoją pozycję eksperta',
'Pomożesz innym w podejmowaniu decyzji', 'Pomożesz innym w podejmowaniu decyzji',
'Zyskasz wartościowe linki i widoczność', 'Zyskasz wartościowe linki i widoczność',
@@ -17140,7 +17148,7 @@ function SellPage() {
<div className="sell-benefit-row"> <div className="sell-benefit-row">
<span><Icon name="check" /> 0 zł prowizji</span> <span><Icon name="check" /> 0 zł prowizji</span>
<span><Icon name="shield" /> Bez ukrytych opłat</span> <span><Icon name="shield" /> Bez ukrytych opłat</span>
<span><Icon name="group" /> Tysiące kupujących</span> <span><Icon name="group" /> Kupujący bez pośredników</span>
<span><Icon name="spark" /> Pełne wsparcie</span> <span><Icon name="spark" /> Pełne wsparcie</span>
</div> </div>
@@ -17202,7 +17210,7 @@ function SellPage() {
</article> </article>
<article className="sell-channels-card"> <article className="sell-channels-card">
<h2>Twoje ogłoszenie dotrze do:</h2> <h2>Gdzie zobaczą Twoje ogłoszenie:</h2>
<div className="sell-channel-list"> <div className="sell-channel-list">
{sellChannels.map((channel) => ( {sellChannels.map((channel) => (
<div key={channel.title}> <div key={channel.title}>
@@ -17263,7 +17271,7 @@ function SellPage() {
<section className="sell-bottom-cta"> <section className="sell-bottom-cta">
<div> <div>
<strong>Gotowy na szybką i bezpieczną sprzedaż?</strong> <strong>Gotowy na szybką i bezpieczną sprzedaż?</strong>
<span>Dołącz do tysięcy osób, które już sprzedały z nami swoje mieszkanie.</span> <span>Wystaw ogłoszenie za darmo i sprzedawaj bez prowizji.</span>
</div> </div>
<Link to={ROUTES.add}>Dodaj ogłoszenie za darmo</Link> <Link to={ROUTES.add}>Dodaj ogłoszenie za darmo</Link>
<small>Zajmie Ci to tylko 2 minuty</small> <small>Zajmie Ci to tylko 2 minuty</small>
@@ -19389,7 +19397,7 @@ function AdvertisingPage() {
<div> <div>
<h2>Twoja reklama w serwisie Polska Lokalnie</h2> <h2>Twoja reklama w serwisie Polska Lokalnie</h2>
<ul> <ul>
<li><Icon name="check" /> Dotrzesz do tysięcy klientów szukających usług</li> <li><Icon name="check" /> Trafisz do osób, które szukają usług w Twojej okolicy</li>
<li><Icon name="check" /> Wyróżnisz swoją firmę na tle konkurencji</li> <li><Icon name="check" /> Wyróżnisz swoją firmę na tle konkurencji</li>
<li><Icon name="check" /> Zwiększysz liczbę zapytań i zleceń</li> <li><Icon name="check" /> Zwiększysz liczbę zapytań i zleceń</li>
</ul> </ul>
@@ -20211,7 +20219,7 @@ function ServicesPage() {
<p>Twoja firma może być tutaj i docierać do klientów z całej Polski.</p> <p>Twoja firma może być tutaj i docierać do klientów z całej Polski.</p>
<ul className="companies-empty-benefits"> <ul className="companies-empty-benefits">
<li><i><Icon name="check" /></i> Docieraj do tysięcy klientów</li> <li><i><Icon name="check" /></i> Docieraj do osób szukających usług</li>
<li><i><Icon name="check" /></i> Zwiększaj rozpoznawalność marki</li> <li><i><Icon name="check" /></i> Zwiększaj rozpoznawalność marki</li>
<li><i><Icon name="check" /></i> Buduj zaufanie i zdobywaj opinie</li> <li><i><Icon name="check" /></i> Buduj zaufanie i zdobywaj opinie</li>
</ul> </ul>
@@ -24532,7 +24540,7 @@ function CompanyProfile({ profile }: { profile: PublicProfile }) {
</div> </div>
<div className="company-profile-identity"> <div className="company-profile-identity">
{profile.verified && ( {profile.verified && (
<span className="company-verified-badge"><Icon name="shield" /> Zweryfikowana firma</span> <span className="company-verified-badge"><Icon name="shield" /> Adres e-mail potwierdzony</span>
)} )}
<h1>{profile.fullName}</h1> <h1>{profile.fullName}</h1>
{profile.companyTagline && <p className="company-profile-tagline">{profile.companyTagline}</p>} {profile.companyTagline && <p className="company-profile-tagline">{profile.companyTagline}</p>}
@@ -24749,8 +24757,8 @@ function PublicProfilePage() {
</div> </div>
<blockquote> <blockquote>
{profile.verified {profile.verified
? 'Konto zweryfikowane przez serwis Polska Lokalnie.' ? 'Właściciel konta potwierdził adres e-mail podany przy rejestracji.'
: 'Konto nie przeszło jeszcze weryfikacji.'} : 'Adres e-mail tego konta nie został jeszcze potwierdzony.'}
</blockquote> </blockquote>
<div className="public-profile-stats"> <div className="public-profile-stats">
<div><strong>{profile.listingsCount}</strong><small>Ogłoszenia</small></div> <div><strong>{profile.listingsCount}</strong><small>Ogłoszenia</small></div>
@@ -24807,7 +24815,7 @@ function PublicProfilePage() {
<div className="public-profile-badges"> <div className="public-profile-badges">
<span><Icon name="user" /> Konto prywatne</span> <span><Icon name="user" /> Konto prywatne</span>
<span><Icon name="calendar" /> W serwisie od {memberSinceLabel}</span> <span><Icon name="calendar" /> W serwisie od {memberSinceLabel}</span>
{profile.verified && <span><Icon name="shield" /> Zweryfikowany użytkownik</span>} {profile.verified && <span><Icon name="shield" /> Potwierdzony e-mail</span>}
<span><Icon name="message" /> Kontakt przez wiadomości</span> <span><Icon name="message" /> Kontakt przez wiadomości</span>
</div> </div>
</section> </section>