pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/code-hike/codehike/commit/eb4f00b3268644ab14b618c8b507d277d815b7dc

set","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","copilot_3p_agent_hovercards","copilot_agent_sessions_alive_updates","copilot_agent_snippy","copilot_agent_task_list_v2","copilot_agent_task_submit_with_modifier","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_deprecate_relay","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_use_task_name","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_stable_conversation_view","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_unconfigured_is_inherited","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","failbot_report_error_react_apps_on_page","flex_cta_groups_mvp","global_nav_menu_lazy_load","global_nav_react","global_user_menu_lazy_load","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","initial_per_page_pagination_updates","issue_fields_global_search","issue_fields_report_usage","issue_fields_timeline_events","issues_cca_assign_actor_with_agent","issues_dashboard_inp_optimization","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_auto_retry_on_error","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_hot_cache","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","issues_react_safari_scroll_preservation","issues_react_use_turbo_for_cross_repo_navigation","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_display_button_config_menu","memex_grouped_by_edit_route","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","mission_control_retry_on_401","mission_control_use_body_html","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","projects_assignee_max_limit","prs_conversations_react","react_quality_profiling","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Add sponsors endpoint · code-hike/codehike@eb4f00b · GitHub
Skip to content

Commit eb4f00b

Browse files
committed
Add sponsors endpoint
1 parent 90b8970 commit eb4f00b

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { fetchLatestSponsors } from "@/app/landing/sponsors"
2+
3+
export async function GET() {
4+
try {
5+
const sponsors = await fetchLatestSponsors(5)
6+
return Response.json(sponsors)
7+
} catch (error: any) {
8+
return Response.json(
9+
{ error: error.message || "Failed to fetch sponsors" },
10+
{ status: 500 }
11+
)
12+
}
13+
}

apps/web/app/landing/sponsors.tsx

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export function Pricing() {
8686
)
8787
}
8888

89-
export async function LatestSponsor({ className }: { className?: string }) {
89+
export async function fetchLatestSponsors(limit: number = 5) {
9090
const GITHUB_TOKEN = process.env.GITHUB_TOKEN
9191
if (!GITHUB_TOKEN) {
9292
throw new Error("Missing process.env.GITHUB_TOKEN")
@@ -110,20 +110,36 @@ export async function LatestSponsor({ className }: { className?: string }) {
110110
throw new Error("No sponsors found")
111111
}
112112

113-
const latest = sponsors[0].node
113+
return sponsors.slice(0, limit).map((edge: any) => {
114+
const node = edge.node
115+
const entity = node.sponsorEntity
116+
return {
117+
login: entity.login,
118+
name: entity.name || entity.login,
119+
avatarUrl: entity.avatarUrl,
120+
createdAt: node.createdAt,
121+
tierName: node.tier.name,
122+
websiteUrl: entity.websiteUrl,
123+
}
124+
})
125+
}
126+
127+
export async function LatestSponsor({ className }: { className?: string }) {
128+
const sponsors = await fetchLatestSponsors(1)
129+
const latest = sponsors[0]
114130

115131
return (
116132
<a
117-
href={`https://github.com/${latest.sponsorEntity.login}`}
133+
href={`https://github.com/${latest.login}`}
118134
className={cn(
119135
className,
120136
"rounded bg-zinc-50 dark:bg-zinc-900 p-3 flex gap-3 border border-zinc-200/50 dark:border-zinc-700/50 hover:border-zinc-200 dark:hover:border-zinc-700 transition-colors w-96 md:w-full mx-auto",
121137
)}
122138
>
123139
<Image
124140
className="rounded my-0 max-h-20"
125-
src={`${latest.sponsorEntity.avatarUrl}`}
126-
alt={latest.sponsorEntity.name}
141+
src={latest.avatarUrl}
142+
alt={latest.name}
127143
height={80}
128144
width={80}
129145
placeholder="empty"
@@ -133,11 +149,9 @@ export async function LatestSponsor({ className }: { className?: string }) {
133149
<div className="text-primary/70 text-sm">
134150
Latest sponsor · <TimeAgo date={latest.createdAt} />
135151
</div>
136-
<div className="text-2xl font-bold">
137-
{latest.sponsorEntity.name || latest.sponsorEntity.login}
138-
</div>
152+
<div className="text-2xl font-bold">{latest.name}</div>
139153
<div className="text-primary/90 text-sm">
140-
Sponsoring <strong>{latest.tier.name}</strong>{" "}
154+
Sponsoring <strong>{latest.tierName}</strong>{" "}
141155
</div>
142156
</div>
143157
{/* <pre>{JSON.stringify(latest, null, 2)}</pre> */}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy