feat(growth): ship search registration, long-tail SEO and in-app sharing
Register both Paca domains on Naver Search Advisor, Google Search Console and
Bing Webmaster Tools so the site can be indexed by every major engine, add
DASH and AES-128 how-to pages to capture protocol-specific searches, and let a
finished download share a UTM-tagged landing link from the completion shelf.
Package-manager manifests (winget, Chocolatey, Scoop) now carry verified
v1.2.0 hashes and product codes instead of placeholders. All 2,757 tests pass.
💘 Generated with Crush
Assisted-by: Crush:deepseek-v4.1-flash
This commit is contained in:
parent
0e568f1f0a
commit
a5a8da7424
37 changed files with 2841 additions and 10 deletions
|
|
@ -1177,6 +1177,13 @@
|
|||
<TextBlock Text="폴더에 표시" FontSize="11.5" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button x:Name="DownloadShelfShareBtn" Style="{StaticResource GhostButton}" Height="28" Padding="10,0" Margin="2,0"
|
||||
Click="DownloadShelfShareBtn_Click" AutomationProperties.Name="다운로드 결과 공유">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="" Style="{StaticResource FluentIcon}" FontSize="11" Margin="0,0,4,0" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="공유" FontSize="11.5" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button x:Name="DownloadShelfShowAllBtn" Style="{StaticResource GhostButton}" Height="28" Padding="10,0" Margin="2,0"
|
||||
Click="DownloadShelfShowAllBtn_Click" AutomationProperties.Name="모두 표시">
|
||||
<TextBlock Text="모두 표시" FontSize="11.5" VerticalAlignment="Center"/>
|
||||
|
|
|
|||
|
|
@ -5603,6 +5603,25 @@ public partial class MainWindow : Window
|
|||
}
|
||||
}
|
||||
|
||||
private void DownloadShelfShareBtn_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
var name = DownloadShelfFileName?.Text ?? "";
|
||||
var shareText = Paca.Core.Social.ShareCardBuilder.BuildShareText(name);
|
||||
try { Clipboard.SetText(shareText); } catch { }
|
||||
var dlg = new QrCodeDialog(Paca.Core.Social.ShareCardBuilder.BuildShareUrl(), Paca.Core.Social.ShareCardBuilder.BuildQrTitle(name))
|
||||
{
|
||||
Owner = this
|
||||
};
|
||||
dlg.ShowDialog();
|
||||
}
|
||||
catch
|
||||
{
|
||||
_toast?.Show("공유 링크를 만들지 못했습니다", "error");
|
||||
}
|
||||
}
|
||||
|
||||
private void DownloadShelfShowAllBtn_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
DownloadsPopup.IsOpen = true;
|
||||
|
|
|
|||
33
src/Paca.Core/Social/ShareCardBuilder.cs
Normal file
33
src/Paca.Core/Social/ShareCardBuilder.cs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
namespace Paca.Core.Social;
|
||||
|
||||
/// <summary>
|
||||
/// 제품 내 확산 루프용 공유 카드 페이로드 빌더.
|
||||
/// 다운로드 완료 화면에서 결과물을 공유할 때 UTM 이 붙은 랜딩 URL 을 함께 실어 보내
|
||||
/// 공유에서 방문, 설치로 이어지는 유입 루프를 닫는다.
|
||||
/// </summary>
|
||||
public static class ShareCardBuilder
|
||||
{
|
||||
/// <summary>공유에 사용하는 공식 랜딩 URL.</summary>
|
||||
public const string LandingUrl = "https://mediabrowser.chanpaca.net/";
|
||||
|
||||
/// <summary>유입 분석용 UTM 소스(앱 내 공유).</summary>
|
||||
public const string UtmSource = "paca_app";
|
||||
|
||||
/// <summary>UTM 이 부착된 공유용 랜딩 URL 을 만든다.</summary>
|
||||
public static string BuildShareUrl(string medium = "share_card")
|
||||
{
|
||||
var m = string.IsNullOrWhiteSpace(medium) ? "share_card" : medium.Trim();
|
||||
return $"{LandingUrl}?utm_source={UtmSource}&utm_medium={m}&utm_campaign=download_complete";
|
||||
}
|
||||
|
||||
/// <summary>공유 시트나 클립보드에 넣을 공유 문구를 만든다.</summary>
|
||||
public static string BuildShareText(string title, string medium = "share_card")
|
||||
{
|
||||
var name = string.IsNullOrWhiteSpace(title) ? "미디어" : title.Trim();
|
||||
return $"Paca로 '{name}' 저장 완료. 재생만 하면 스트림을 자동 감지해 무손실 MP4로 저장하는 100% 무료 미디어 브라우저 → {BuildShareUrl(medium)}";
|
||||
}
|
||||
|
||||
/// <summary>공유 카드(QR) 창의 제목을 만든다.</summary>
|
||||
public static string BuildQrTitle(string title)
|
||||
=> string.IsNullOrWhiteSpace(title) ? "Paca 무료 다운로드" : $"'{title.Trim()}' 공유 - Paca 무료 다운로드";
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue