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',
title: 'Tysiące kupujących',
text: 'każdego dnia',
title: 'Kupujący bez pośredników',
text: 'piszą prosto do Ciebie',
},
{
icon: 'shuffle',
@@ -1118,7 +1118,7 @@ const sellSteps = [
{
icon: 'calculator',
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',
@@ -1146,12 +1146,12 @@ const sellReasons = [
{
icon: 'target',
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',
title: 'Sprzedaż nawet w 7 dni',
text: 'Szybka sprzedaż dzięki dużej bazie kupujących',
title: 'Bezpośredni kontakt',
text: 'Kupujący pisze i dzwoni prosto do Ciebie, bez pośrednika',
},
{
icon: 'shield',
@@ -1161,35 +1161,31 @@ const sellReasons = [
{
icon: 'warning',
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 = [
{
icon: 'logo',
title: 'polskalokalnie.pl',
text: 'Nasza strona',
title: 'Lista ofert',
text: 'Wyszukiwarka i filtry',
},
{
icon: 'search',
title: 'Google',
text: 'Reklama Google',
icon: 'pin',
title: 'Mapa ofert',
text: 'Widoczne w okolicy',
},
{
icon: 'message',
title: 'Facebook',
text: 'Marketplace i posty',
title: 'Podgląd linku',
text: 'Zdjęcie i cena w komunikatorach',
},
{
icon: 'group',
title: 'Grupy lokalne',
text: 'Ponad 500 grup',
},
{
icon: 'mail',
title: 'Newsletter',
text: 'Tysiące subskrybentów',
icon: 'star',
title: 'Wyróżnienie',
text: 'Płatne miejsce na górze listy',
},
];
@@ -1201,8 +1197,8 @@ const sellFeatures = [
},
{
icon: 'camera',
title: 'Galeria zdjęć i video',
text: 'Dodaj do 30 zdjęć i film',
title: 'Galeria zdjęć',
text: 'Dodaj do 8 zdjęć nieruchomości',
},
{
icon: 'tour',
@@ -2138,8 +2134,8 @@ const addFooterBenefits = [
},
{
icon: 'group',
title: 'Tysiące kupujących',
text: 'Twoje ogłoszenie zobaczą zainteresowani.',
title: 'Bez pośredników',
text: 'Kupujący kontaktuje się z Tobą wprost.',
},
{
icon: 'clock',
@@ -2219,24 +2215,29 @@ const quickGuides = [
},
];
// Skroty do list ofert - kazdy prowadzi do wyniku, ktory faktycznie odpowiada nazwie kafelka.
const guideRelatedOffers = [
{
title: 'Mieszkania w Krakowie',
to: buyCityPath('Kraków'),
image: cityImage,
position: '88% 56%',
},
{
title: 'Mieszkania w Warszawie',
to: buyCityPath('Warszawa'),
image: cityImage,
position: '18% 48%',
},
{
title: 'Nowe mieszkania',
title: 'Wszystkie oferty sprzedaży',
to: ROUTES.buy,
image: cityImage,
position: '74% 52%',
},
{
title: 'Okazje cenowe',
title: 'Oferty wynajmu',
to: ROUTES.rent,
image: heroImage,
position: '47% 58%',
},
@@ -6558,7 +6559,7 @@ function AccountSidebar() {
<strong>{getDisplayName(user)}</strong>
<small>{user?.email}</small>
<em className={user?.verified ? 'verified' : 'pending'}>
{user?.verified ? 'Zweryfikowane konto' : 'Oczekuje na weryfikację'}
{user?.verified ? 'Adres e-mail potwierdzony' : 'Potwierdź adres e-mail'}
</em>
</div>
</div>
@@ -10512,6 +10513,9 @@ function toSearchPreferences(settings: UserSettings): SearchPreferences {
const OTP_RESEND_COOLDOWN_SECONDS = 60;
// 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 }: {
icon: string;
label: string;
@@ -11825,20 +11829,24 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences
<p>Wybierz, o czym chcesz otrzymywać wiadomości.</p>
</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">
<SettingsToggleRow
icon="bell"
label="Nowe oferty z zapisanych wyszukiwań"
checked={settings?.notifySavedSearches ?? true}
disabled={isLoading}
onChange={(next) => { void patchSettings({ notifySavedSearches: next }); }}
hint={SETTINGS_NOT_SENT_YET}
checked={false}
disabled
onChange={() => { /* funkcja jeszcze nie powstala */ }}
/>
<SettingsToggleRow
icon="trend"
label="Alerty cenowe"
checked={settings?.notifyPriceAlerts ?? true}
disabled={isLoading}
onChange={(next) => { void patchSettings({ notifyPriceAlerts: next }); }}
hint={SETTINGS_NOT_SENT_YET}
checked={false}
disabled
onChange={() => { /* funkcja jeszcze nie powstala */ }}
/>
<SettingsToggleRow
icon="message"
@@ -11850,9 +11858,10 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences
<SettingsToggleRow
icon="gear"
label="Nowości i aktualizacje serwisu"
checked={settings?.notifyProductNews ?? false}
disabled={isLoading}
onChange={(next) => { void patchSettings({ notifyProductNews: next }); }}
hint={SETTINGS_NOT_SENT_YET}
checked={false}
disabled
onChange={() => { /* funkcja jeszcze nie powstala */ }}
/>
<SettingsToggleRow
icon="mail"
@@ -13002,7 +13011,7 @@ function LoginPage({ onLogin }: { onLogin: (user: AuthUser) => void }) {
<span><Icon name="check" /></span>
<p>
<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>
</article>
</div>
@@ -13195,9 +13204,8 @@ function HomePage({ filters, onOpenMap }: { filters: FilterState; onOpenMap: (ci
<span className="tour-badge">360°</span>
<span>
<strong>Wirtualny spacer</strong>
<small>Zobacz mieszkanie w 3D</small>
<small>Gdy sprzedający doda spacer, obejrzysz go w ogłoszeniu</small>
</span>
<em className="soon-tag">Wkrótce</em>
</aside>
</div>
</section>
@@ -13281,7 +13289,7 @@ function HomePage({ filters, onOpenMap }: { filters: FilterState; onOpenMap: (ci
<article className="free-card">
<div>
<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}>
<span>Dodaj ogłoszenie</span>
<strong>0 zł</strong>
@@ -14391,7 +14399,7 @@ function AddListingPage({ editListingId }: { editListingId?: number }) {
<h1>
Dodaj ogłoszenie <span>za darmo</span>
</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 && (
@@ -15056,7 +15064,7 @@ function AddListingPage({ editListingId }: { editListingId?: number }) {
<h2>Co dalej?</h2>
<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: 'gear', title: 'Zarządzaj ogłoszeniem', text: 'W każdej chwili możesz edytować lub usunąć swoje ogłoszenie.' },
].map((tip) => (
@@ -16314,10 +16322,10 @@ function GuidesPage() {
</form>
<div className="popular-links">
<span>Popularne:</span>
<Link to={ROUTES.creditCalculator}>Kredyt hipoteczny</Link>
<Link to={ROUTES.rent}>Umowa najmu</Link>
<Link to={ROUTES.sell}>Podatek od sprzedaży</Link>
<Link to={ROUTES.guideBuying}>Księga wieczysta</Link>
<Link to={ROUTES.guideCredit}>Kredyt hipoteczny</Link>
<Link to={ROUTES.guideRent}>Umowa najmu</Link>
<Link to={ROUTES.guideLaw}>Podatek od sprzedaży</Link>
<Link to={ROUTES.guideLaw}>Księga wieczysta</Link>
</div>
</div>
</div>
@@ -16402,14 +16410,14 @@ function GuidesPage() {
</section>
<section className="related-offers">
<h2>Powiązane oferty</h2>
<p>Zobacz mieszkania dopasowane do Twoich zainteresowań</p>
<h2>Szukasz mieszkania?</h2>
<p>Przejdź prosto do ofert w wybranej lokalizacji</p>
<div className="related-offer-grid">
{guideRelatedOffers.map((offer) => (
<article key={offer.title}>
<div>
<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
className="related-offer-image"
@@ -16429,7 +16437,7 @@ function GuidesPage() {
</div>
<p>Masz wiedzę o nieruchomościach? Napisz własny poradnik i pomóż innym w podejmowaniu decyzji.</p>
<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>
<Link className="guide-ai-cta" to={guideAddPath()}>
Napisz swój artykuł
@@ -16804,7 +16812,7 @@ const PROPOSE_STEPS = [
];
const PROPOSE_BENEFITS = [
'Dotrzesz do tysięcy czytelników',
'Twój poradnik trafi do centrum wiedzy',
'Zbudujesz swoją pozycję eksperta',
'Pomożesz innym w podejmowaniu decyzji',
'Zyskasz wartościowe linki i widoczność',
@@ -17140,7 +17148,7 @@ function SellPage() {
<div className="sell-benefit-row">
<span><Icon name="check" /> 0 zł prowizji</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>
</div>
@@ -17202,7 +17210,7 @@ function SellPage() {
</article>
<article className="sell-channels-card">
<h2>Twoje ogłoszenie dotrze do:</h2>
<h2>Gdzie zobaczą Twoje ogłoszenie:</h2>
<div className="sell-channel-list">
{sellChannels.map((channel) => (
<div key={channel.title}>
@@ -17263,7 +17271,7 @@ function SellPage() {
<section className="sell-bottom-cta">
<div>
<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>
<Link to={ROUTES.add}>Dodaj ogłoszenie za darmo</Link>
<small>Zajmie Ci to tylko 2 minuty</small>
@@ -19389,7 +19397,7 @@ function AdvertisingPage() {
<div>
<h2>Twoja reklama w serwisie Polska Lokalnie</h2>
<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" /> Zwiększysz liczbę zapytań i zleceń</li>
</ul>
@@ -20211,7 +20219,7 @@ function ServicesPage() {
<p>Twoja firma może być tutaj i docierać do klientów z całej Polski.</p>
<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> Buduj zaufanie i zdobywaj opinie</li>
</ul>
@@ -24532,7 +24540,7 @@ function CompanyProfile({ profile }: { profile: PublicProfile }) {
</div>
<div className="company-profile-identity">
{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>
{profile.companyTagline && <p className="company-profile-tagline">{profile.companyTagline}</p>}
@@ -24749,8 +24757,8 @@ function PublicProfilePage() {
</div>
<blockquote>
{profile.verified
? 'Konto zweryfikowane przez serwis Polska Lokalnie.'
: 'Konto nie przeszło jeszcze weryfikacji.'}
? 'Właściciel konta potwierdził adres e-mail podany przy rejestracji.'
: 'Adres e-mail tego konta nie został jeszcze potwierdzony.'}
</blockquote>
<div className="public-profile-stats">
<div><strong>{profile.listingsCount}</strong><small>Ogłoszenia</small></div>
@@ -24807,7 +24815,7 @@ function PublicProfilePage() {
<div className="public-profile-badges">
<span><Icon name="user" /> Konto prywatne</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>
</div>
</section>