diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue index 5036efc8a..18a686332 100644 --- a/apps/app-frontend/src/App.vue +++ b/apps/app-frontend/src/App.vue @@ -84,6 +84,7 @@ import InstallToPlayModal from '@/components/ui/modal/InstallToPlayModal.vue' import ModpackAlreadyInstalledModal from '@/components/ui/modal/ModpackAlreadyInstalledModal.vue' import UpdateToPlayModal from '@/components/ui/modal/UpdateToPlayModal.vue' import NavButton from '@/components/ui/NavButton.vue' +import PrideFundraiserBanner from '@/components/ui/PrideFundraiserBanner.vue' import PromotionWrapper from '@/components/ui/PromotionWrapper.vue' import QuickInstanceSwitcher from '@/components/ui/QuickInstanceSwitcher.vue' import SplashScreen from '@/components/ui/SplashScreen.vue' @@ -101,6 +102,7 @@ import { list } from '@/helpers/profile.js' import { mergeUrlQuery, parseModrinthLink } from '@/helpers/project-links.ts' import { get as getSettings, set as setSettings } from '@/helpers/settings.ts' import { get_opening_command, initialize_state } from '@/helpers/state' +import { hasActivePride26Midas, hasMidasBadge } from '@/helpers/user-campaigns.ts' import { areUpdatesEnabled, enqueueUpdateForInstallation, @@ -134,6 +136,7 @@ const route = useRoute() const APP_LEFT_NAV_WIDTH = '4rem' const APP_SIDEBAR_WIDTH = 300 const INTERCOM_BUBBLE_DEFAULT_PADDING = 20 +const PRIDE_FUNDRAISER_END_DATE = new Date('2026-07-01T00:00:00Z').getTime() const credentials = ref() const sidebarToggled = ref(true) const unsubscribeSidebarToggle = themeStore.$subscribe(() => { @@ -144,6 +147,9 @@ const forceSidebar = computed( ) const sidebarVisible = computed(() => sidebarToggled.value || forceSidebar.value) const hostingRouteActive = computed(() => route.path.startsWith('/hosting')) +const prideFundraiserEnabled = computed( + () => themeStore.getFeatureFlag('pride_fundraiser') && Date.now() < PRIDE_FUNDRAISER_END_DATE, +) const hostingIntercomIdentityKey = computed(() => { const rawServerId = route.params.id const serverId = Array.isArray(rawServerId) ? rawServerId[0] : rawServerId @@ -192,6 +198,12 @@ const tauriApiClient = new TauriModrinthClient({ ], }) provideModrinthClient(tauriApiClient) +const { data: authenticatedModrinthUser } = useQuery({ + queryKey: computed(() => ['authenticated-user', 'campaigns', credentials.value?.user?.id]), + queryFn: () => tauriApiClient.labrinth.users_v3.getAuthenticated(), + enabled: () => !!credentials.value?.session, + retry: false, +}) providePageContext({ hierarchicalSidebarAvailable: ref(true), showAds: ref(false), @@ -676,12 +688,11 @@ async function logOut() { await fetchCredentials() } -const MIDAS_BITFLAG = 1 << 0 const hasPlus = computed( () => - credentials.value && - credentials.value.user && - (credentials.value.user.badges & MIDAS_BITFLAG) === MIDAS_BITFLAG, + !!credentials.value?.user && + (hasMidasBadge(credentials.value.user) || + hasActivePride26Midas(authenticatedModrinthUser.value?.campaigns?.pride_26)), ) const showAd = computed( @@ -1479,6 +1490,10 @@ provideAppUpdateDownloadProgress(appUpdateDownload) +

News

diff --git a/apps/app-frontend/src/components/ui/PrideFundraiserBanner.vue b/apps/app-frontend/src/components/ui/PrideFundraiserBanner.vue new file mode 100644 index 000000000..4827742f3 --- /dev/null +++ b/apps/app-frontend/src/components/ui/PrideFundraiserBanner.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/apps/app-frontend/src/components/ui/friends/FriendsList.vue b/apps/app-frontend/src/components/ui/friends/FriendsList.vue index ba9e78d69..cff91a960 100644 --- a/apps/app-frontend/src/components/ui/friends/FriendsList.vue +++ b/apps/app-frontend/src/components/ui/friends/FriendsList.vue @@ -393,7 +393,6 @@ const messages = defineMessages({ -import { DropdownIcon, EditIcon, PlusIcon, TrashIcon } from '@modrinth/assets' +import { DropdownIcon, EditIcon, PlusIcon, TrashIcon, UnknownIcon } from '@modrinth/assets' import { Accordion, ButtonStyled, @@ -11,6 +11,7 @@ import { useVIntl, } from '@modrinth/ui' import { useElementSize, useWindowSize } from '@vueuse/core' +import { Tooltip } from 'floating-vue' import { computed, nextTick, onUnmounted, ref, useTemplateRef, watch } from 'vue' import type { RenderResult } from '@/helpers/rendering/batch-skin-renderer.ts' @@ -24,6 +25,7 @@ type AddSkinButtonRef = SkinLikeTextButtonExpose | SkinLikeTextButtonExpose[] interface DefaultSkinSection { title: string + infoTooltip?: string skins: Skin[] } @@ -31,6 +33,7 @@ interface SkinSection { key: string title: string kind: SkinSectionKind + infoTooltip?: string skins: Skin[] } @@ -145,6 +148,7 @@ const sections = computed(() => [ key: defaultSkinSectionKey(section.title), title: section.title, kind: 'default' as const, + infoTooltip: section.infoTooltip, skins: section.skins, })), ]) @@ -330,6 +334,24 @@ defineExpose({ getAddSkinButtonElement }) {{ section.title }} + + + + + +
now +} diff --git a/apps/app-frontend/src/locales/en-US/index.json b/apps/app-frontend/src/locales/en-US/index.json index 8b04360fe..5d909a577 100644 --- a/apps/app-frontend/src/locales/en-US/index.json +++ b/apps/app-frontend/src/locales/en-US/index.json @@ -431,6 +431,15 @@ "app.skins.section.minecon-earth-2017": { "message": "MINECON Earth 2017" }, + "app.skins.section.modrinth": { + "message": "Modrinth" + }, + "app.skins.section.modrinth-pride": { + "message": "Modrinth Pride" + }, + "app.skins.section.modrinth-pride.tooltip": { + "message": "You received these skins for donating to a Modrinth Pride fundraiser during Pride Month." + }, "app.skins.section.mounts-of-mayhem": { "message": "Mounts of Mayhem" }, diff --git a/apps/app-frontend/src/pages/Skins.vue b/apps/app-frontend/src/pages/Skins.vue index 9b4490a72..58bb228f5 100644 --- a/apps/app-frontend/src/pages/Skins.vue +++ b/apps/app-frontend/src/pages/Skins.vue @@ -13,11 +13,14 @@ import { commonMessages, ConfirmModal, defineMessages, + injectAuth, + injectModrinthClient, injectNotificationManager, SkinPreviewRenderer, useVIntl, } from '@modrinth/ui' import { arrayBufferToBase64 } from '@modrinth/utils' +import { useQuery } from '@tanstack/vue-query' import { type DragDropEvent, getCurrentWebview } from '@tauri-apps/api/webview' import { computedAsync } from '@vueuse/core' import type { Ref } from 'vue' @@ -44,6 +47,7 @@ import { normalize_skin_texture, remove_custom_skin, } from '@/helpers/skins.ts' +import { hasPride26Badge } from '@/helpers/user-campaigns.ts' import { handleSevereError } from '@/store/error' import { useTheming } from '@/store/state' @@ -53,11 +57,25 @@ type VirtualSkinSectionListExpose = { } const PENDING_SKIN_REFRESH_DELAY_MS = 11_000 +const DEFAULT_SKIN_SECTION_SORT_ORDER = ['Default skins', 'Modrinth Pride'] const messages = defineMessages({ skinSelectorTitle: { id: 'app.skins.title', defaultMessage: 'Skin selector', }, + modrinthPrideSection: { + id: 'app.skins.section.modrinth-pride', + defaultMessage: 'Modrinth Pride', + }, + modrinthPrideTooltip: { + id: 'app.skins.section.modrinth-pride.tooltip', + defaultMessage: + 'You received these skins for donating to a Modrinth Pride fundraiser during Pride Month.', + }, + modrinthSection: { + id: 'app.skins.section.modrinth', + defaultMessage: 'Modrinth', + }, defaultSkinsSection: { id: 'app.skins.section.default-skins', defaultMessage: 'Default skins', @@ -157,6 +175,8 @@ const skinSectionList = useTemplateRef('skinSectio const { formatMessage } = useVIntl() const notifications = injectNotificationManager() const { addNotification, handleError } = notifications +const auth = injectAuth() +const client = injectModrinthClient() const themeStore = useTheming() const skins = ref([]) @@ -180,22 +200,42 @@ const savedSkins = computed(() => { return [] } }) -const defaultSkins = computed(() => filterDefaultSkins(skins.value)) +const { data: modrinthUser } = useQuery({ + queryKey: computed(() => ['authenticated-user', 'campaigns', auth.user.value?.id]), + queryFn: () => client.labrinth.users_v3.getAuthenticated(), + enabled: () => !!auth.session_token.value, + retry: false, +}) +const hasModrinthPrideCampaign = computed( + () => !!auth.session_token.value && hasPride26Badge(modrinthUser.value?.campaigns?.pride_26), +) +const defaultSkins = computed(() => + filterDefaultSkins(skins.value).filter( + (skin) => skin.section !== 'Modrinth Pride' || hasModrinthPrideCampaign.value, + ), +) const defaultSkinSections = computed(() => { const sections = new Map() for (const skin of defaultSkins.value) { - const sectionTitle = getDefaultSkinSectionTitle(skin.section) - const sectionSkins = sections.get(sectionTitle) + const section = skin.section ?? 'Default skins' + const sectionSkins = sections.get(section) if (sectionSkins) { sectionSkins.push(skin) } else { - sections.set(sectionTitle, [skin]) + sections.set(section, [skin]) } } - return Array.from(sections, ([title, skins]) => ({ title, skins })) + return Array.from(sections, ([section, skins]) => ({ + section, + title: getDefaultSkinSectionTitle(section), + infoTooltip: getDefaultSkinSectionInfoTooltip(section), + skins, + })).sort( + (a, b) => getDefaultSkinSectionSortIndex(a.section) - getDefaultSkinSectionSortIndex(b.section), + ) }) const currentCape = computed(() => { @@ -303,6 +343,10 @@ function isMinecraftSkinRateLimitError(error: unknown) { function getDefaultSkinSectionTitle(section?: string) { switch (section) { + case 'Modrinth Pride': + return formatMessage(messages.modrinthPrideSection) + case 'Modrinth': + return formatMessage(messages.modrinthSection) case 'MINECON Earth 2017': return formatMessage(messages.mineconEarth2017Section) case 'Builders & Biomes': @@ -326,6 +370,20 @@ function getDefaultSkinSectionTitle(section?: string) { } } +function getDefaultSkinSectionInfoTooltip(section: string) { + switch (section) { + case 'Modrinth Pride': + return formatMessage(messages.modrinthPrideTooltip) + default: + return undefined + } +} + +function getDefaultSkinSectionSortIndex(section: string) { + const index = DEFAULT_SKIN_SECTION_SORT_ORDER.indexOf(section) + return index === -1 ? DEFAULT_SKIN_SECTION_SORT_ORDER.length : index +} + function changeSkin(newSkin: Skin) { selectedSkin.value = newSkin } diff --git a/apps/app-frontend/src/store/theme.ts b/apps/app-frontend/src/store/theme.ts index 3eaa07337..70625aa6c 100644 --- a/apps/app-frontend/src/store/theme.ts +++ b/apps/app-frontend/src/store/theme.ts @@ -9,6 +9,7 @@ export const DEFAULT_FEATURE_FLAGS = { server_ram_as_bytes_always_on: false, always_show_app_controls: false, skip_unknown_pack_warning: false, + pride_fundraiser: true, i18n_debug: false, } diff --git a/apps/frontend/nuxt.config.ts b/apps/frontend/nuxt.config.ts index 83f428f01..45f1526eb 100644 --- a/apps/frontend/nuxt.config.ts +++ b/apps/frontend/nuxt.config.ts @@ -75,10 +75,10 @@ export default defineNuxtConfig({ }, ssr: { // https://github.com/Akryum/floating-vue/issues/809#issuecomment-1002996240 - noExternal: ['v-tooltip'], - optimizeDeps: { - include: ['vue-router'], - }, + noExternal: ['floating-vue', '@floating-ui/core', '@floating-ui/dom'], + }, + optimizeDeps: { + include: ['vue-router', 'floating-vue', '@floating-ui/dom'], }, define: { global: {}, diff --git a/apps/frontend/src/public/news/article/pride-campaign-2026/mrpack-pride-banner.webp b/apps/frontend/src/public/news/article/pride-campaign-2026/mrpack-pride-banner.webp new file mode 100644 index 000000000..dec24a621 Binary files /dev/null and b/apps/frontend/src/public/news/article/pride-campaign-2026/mrpack-pride-banner.webp differ diff --git a/apps/frontend/src/public/news/article/pride-campaign-2026/pride-badge.webp b/apps/frontend/src/public/news/article/pride-campaign-2026/pride-badge.webp new file mode 100644 index 000000000..c72207512 Binary files /dev/null and b/apps/frontend/src/public/news/article/pride-campaign-2026/pride-badge.webp differ diff --git a/apps/frontend/src/public/news/article/pride-campaign-2026/thumbnail.webp b/apps/frontend/src/public/news/article/pride-campaign-2026/thumbnail.webp new file mode 100644 index 000000000..f8b1e231c Binary files /dev/null and b/apps/frontend/src/public/news/article/pride-campaign-2026/thumbnail.webp differ diff --git a/apps/frontend/src/public/news/feed/articles.json b/apps/frontend/src/public/news/feed/articles.json index fd5b096b6..a110eb65a 100644 --- a/apps/frontend/src/public/news/feed/articles.json +++ b/apps/frontend/src/public/news/feed/articles.json @@ -1,5 +1,12 @@ { "articles": [ + { + "title": "Pride 2026 Fundraiser: Matching up to $5,000", + "summary": "Celebrating our community and working together to make a difference.", + "thumbnail": "https://modrinth.com/news/article/pride-campaign-2026/thumbnail.webp", + "date": "2026-06-01T16:00:00.000Z", + "link": "https://modrinth.com/news/article/pride-campaign-2026" + }, { "title": "Project Analytics are good now", "summary": "Get deeper insights into how people are using your projects with breakdowns, filtering, and more!", diff --git a/apps/frontend/src/public/news/feed/rss.xml b/apps/frontend/src/public/news/feed/rss.xml index a6a7c270c..1616d68c7 100644 --- a/apps/frontend/src/public/news/feed/rss.xml +++ b/apps/frontend/src/public/news/feed/rss.xml @@ -4,15 +4,23 @@ https://modrinth.com/news/ @modrinth/blog - Fri, 29 May 2026 19:14:27 GMT + Sat, 30 May 2026 22:33:00 GMT + + <![CDATA[Pride 2026 Fundraiser: Matching up to $5,000]]> + + https://modrinth.com/news/article/pride-campaign-2026/ + https://modrinth.com/news/article/pride-campaign-2026/ + Mon, 01 Jun 2026 16:00:00 GMT + <![CDATA[<h2>Happy Pride Month!</h2><p>Pride is a time for celebration, self-expression, and community. Queer individuals are part of Modrinth at every level: across our team, our creator community, and the wider Minecraft community as a whole. We're very proud to be vocal in our support for LGBTQIA+ rights all year round.</p><p>But for many people, Pride is a celebration that comes with great risk. Recent reporting shows there's no shortage of tragedies facing LGBTQIA+ people. Threats, attacks, and even worse happen around the world - <a href="https://www.yahoo.com/news/articles/most-amazing-human-being-ever-024305055.html" rel="noopener nofollow ugc">Juniper Blessing</a> and <a href="https://www.advocate.com/news/crime/black-drag-artist-virginia-murdered" rel="noopener nofollow ugc">Shyyell Diamond Sanchez-McCray</a>, trans rights activists <a href="https://www.theguardian.com/global-development/2026/jan/27/pakistan-transgender-attacks-killings" rel="noopener nofollow ugc">Zehrish Khanzadi and Bindiya Rana</a> surviving gunfire in Pakistan, and <a href="https://en.wikipedia.org/wiki/List_of_acts_of_violence_against_LGBTQ_people" rel="noopener nofollow ugc">many more</a> cases like these are reminders that safety is not guaranteed for some members of our community.</p><p>That's why this Pride Month, Modrinth will be running a fundraiser supporting <a href="https://www.rainbowrailroad.org/" rel="noopener nofollow ugc"><strong>Rainbow Railroad</strong></a>.</p><p>Rainbow Railroad works with LGBTQIA+ people who are facing danger, helping to connect them with support, resources, and pathways to safe countries. Through their <strong>Solidarity in Pride 2026</strong> campaign, they're raising funds to help at-risk LGBTQIA+ people access safety when staying in place is no longer an option.</p><p><a href="https://tiltify.com/+modrinth/modrinth-pride-2026" class="!text-2xl font-semibold">You can support the fundraiser here.</a></p><p><strong>When donating, please enter your <em>Modrinth username</em> as the <em>Tiltify display name</em> so we can apply any eligible rewards to your account!</strong></p><h2>Donation Matching Commitment</h2><p>We want to maximize the impact our community can make.</p><p>To help achieve this, we've committed to matching all donations 1:1 until our fundraising goal of $5,000 has been met.</p><h2>Donor Rewards</h2><p>This year, we will also be providing rewards as a small thank you to everyone who supports the fundraiser. Including a few limited rewards specific to this year's fundraiser!</p><h3>Pride Badge 2026 &amp; Pride Skins</h3><p>Everyone who donates will receive a special Pride 2026 profile badge on Modrinth.</p><img width="204px" height="204px" class="mx-auto mb-4" src="/news/article/pride-campaign-2026/pride-badge.webp"><p>Supporters with this badge will also unlock a special Pride section in the Skin selector in the Modrinth App featuring the incredibly cute Mr. Pack in Pride-themed, exclusive Modrinth skins:</p><p><img src="/news/article/pride-campaign-2026/mrpack-pride-banner.webp" alt="Mr. Pack Pride skins"></p><h3>Modrinth+</h3><p>Donations of $5 (USD) or more will grant you with free <a href="/plus" rel="noopener nofollow ugc">Modrinth+</a> benefits for 1 month as an additional thank-you - available to users who do not already have an active Modrinth+ subscription.</p><h2>Pride Collection 2026</h2><p>Alongside the fundraiser, we're also launching the <a href="/collection/M4c3ITvd" rel="noopener nofollow ugc">Modrinth Pride Collection!</a></p><p>This collection highlights projects made by and for the queer community, including mods, resource packs, modpacks, plugins, and more across Modrinth.</p><p><a href="https://tally.so/r/GxQBbO" rel="noopener nofollow ugc"><strong>You can submit projects all month long</strong></a></p><p>Throughout June, we'll be featuring selected projects from the collection across our social media alongside our usual creator spotlights. Pride is about visibility, and we want to use this month to celebrate the LGBTQIA+ creators and communities that help make Modrinth what it is.</p>]]> + <![CDATA[Project Analytics are good now]]> https://modrinth.com/news/article/analytics-overhaul/ https://modrinth.com/news/article/analytics-overhaul/ - Fri, 29 May 2026 11:00:00 GMT + Fri, 29 May 2026 20:00:00 GMT <![CDATA[<p>Hey everyone!</p><p>It's been over two years since we <a href="/news/article/creator-update/" rel="noopener nofollow ugc">initially launched analytics</a> for creators, and in that time we have gotten many requests from creators in the community to be able to see more data about their projects.</p><p>I’m excited to share a complete overhaul to project analytics.</p><p>With a new query builder and a lot of new data, you can finally dig into how people are playing your content.</p><div class="video-wrapper mb-8"><video autoplay loop muted playsinline><source src="./analytics-demo.mp4" type="video/mp4"></video></div><h2>TL;DR</h2><ul><li>New advanced query builder</li><li>Breakdown and filter by tons of different metrics</li><li>Playtime metrics</li><li>Line, area, and bar chart views</li><li>Table view</li><li>Event markers for project releases and Modrinth outages</li></ul><h2>Explore your data</h2><p>To kick things off, let’s talk about the new query builder. At the top of the analytics dashboard, you’ll find a set of controls that lets you ask questions about your projects. You can select projects, choose a timeframe, and add breakdowns and filters to explore exactly the data you want.</p><div class="video-wrapper mb-8"><video autoplay loop muted playsinline><source src="./query-builder.mp4" type="video/mp4"></video></div><h3>Selecting projects</h3><p>The first step is to choose the projects you want to look at. You can select projects you own, along with projects you’re associated with through organizations.</p><p>When not viewing analytics from a project, the page defaults to selecting all projects and breaking down by project.</p><h3>Timeframes + interval</h3><p>Next, select a timeframe and group results by an interval. We’ve added several timeframe presets like “Last 30 Days”, along with a custom date range picker. The intervals you can group by are based on the timeframe.</p><h3>Breakdowns + filters</h3><p>Lastly, the meat and potatoes: breakdowns and filters. Breakdowns split your data into groups to compare. Filters narrow the data down to only what you want to see. You can select up to two breakdowns and as many filters as you want. The following breakdowns and filters are available:</p><ul><li><strong>Project</strong> — Only available when more than one project is selected</li><li><strong>Country</strong></li><li><strong>Monetization</strong> — Shows whether downloads or views are monetized or unmonetized</li><li><strong>Download source</strong> — Shows what launchers your downloads are coming from</li><li><strong>Download reason</strong> — Shows if your project was downloaded as part of a modpack, dependency, or standalone.</li><li><strong>Project version</strong></li><li><strong>Loader</strong> — Shows what loaders people are downloading your project for</li><li><strong>Game version</strong> — Shows what game versions people are downloading your project for</li></ul><h2>Metrics overview</h2><p>After selecting your query parameters, all of the data below updates automatically. At the top is an overview with four metric cards showing total views, downloads, revenue, and playtime. Playtime is a new metric that tracks hours played by users in Modrinth App.</p><p>You can select any metric card to explore that data further on the graph below.</p><p><img src="/news/article/analytics-overhaul/metrics-overview.png" alt="A screenshot of the new project analytics metric cards showing views, downloads, revenue, and playtime."></p><h2>Graph visualization</h2><p>The graph got a fresh coat of paint too. There are now three different views: line, area, and bar. Depending on your query and selected graph view, additional options may be available for things like comparing against the previous period or showing values as a ratio instead of a raw amount.</p><div class="video-wrapper mb-8"><video autoplay loop muted playsinline><source src="./graph-views.mp4" type="video/mp4"></video></div><p>The parameters shown on the graph are controlled through the table card below by checking rows. By default, the graph will pre-select up to the first eight parameters based on the current table sorting. You can also hide parameters directly from the graph by clicking them in the legend.</p><h3>Event markers</h3><p>Another new addition to the graphs are events. Event markers are designed to provide context for unusual trends on the graph. There are two types of events:</p><ul><li><strong>Project Events:</strong> Notable changes related to your project, such as status changes or version releases</li><li><strong>Modrinth Events:</strong> Things that happened on Modrinth that may affect analytics, such as revenue being overreported or analytics outages</li></ul><h2>Table visualization</h2><p>We’ve also added a new table view at the bottom that displays the full results for your query. The table makes comparing views, downloads, revenue, and playtime much easier.</p><p>You can also export the table as a CSV to manipulate the data in other tools, with options to include the selected interval.</p><p><img src="/news/article/analytics-overhaul/breakdown-table.png" alt="A screenshot of the project analytics breakdown table showing country rows and metric columns."></p><h2>Contributing analytics data</h2><p>Some of this data is only available due to support from the launcher or installer downloading the content. If you develop a website, app, or utility that uses the Modrinth CDN to download content, you can also send analytics data back to creators. When sending requests to <code>cdn.modrinth.com</code>, include the <code>modrinth-download-meta</code> header:</p><pre><code class="language-json">{ &quot;reason&quot;: &quot;standalone&quot; | &quot;dependency&quot; | &quot;modpack&quot; | &quot;update&quot;, &quot;game_version&quot;: &quot;&lt;valid game version tag&gt;&quot;, @@ -330,4 +338,4 @@ <![CDATA[<p>Hello, we are Modrinth – an open source mods hosting platform. Sounds dry, doesn't it? So let me tell you our story – and I promise, it won't be boring!</p><h2>Prelude and conception</h2><p>Before Modrinth was even thought of, there already were several giant platforms for mod hosting. However, most of them were too specialized, outdated, or transitively dependent on an uncaring hegemonic 3rd party. Authors and players were always in struggle. The community had to choose 2 out of 3: inconvenience, indifference, obsolescence. Urge for better service, either new or renewed, just founded or acquired arose.</p><p>Although demand for proper competition is the seed, the germ of Modrinth, the biggest role was played by the Fabric project. It set an example of a community-powered alternative. It was democratic, FOSS, listening to the community, and welcoming contribution and 3rd party initiatives. They have shown the modding community that they can evolve and adapt, be accessible and welcoming, cooperative, and caring.</p><h2>Fabricate and HexFabric</h2><p>And, oh boy, did they connect – the demand for competition grew so high, that at some point the community just exploded with novelty. During several months, almost a dozen projects were aiming to be the second Walmart, the third IKEA, the fourth Amazon for your mods. Here beings the story of HexFabrics... – wait, what? What's that?</p><blockquote><p>HexFabric is an umbrella term for modern mod hosting technology. It got its name from Fabric, which at the point was poorly supported (if at all) by the major players on the stage. In practice, HexFabric is just a cozy Discord server, on which several projects have their deputizing channels.</p></blockquote><p>Back on track – Lots of HexFabrics were founded almost simultaneously. Altar.gg, Astronave, Diluv, ModForest, Minerepo... and, most importantly, Fabricate.</p><p>Fabricate began its journey as a proprietary project indexing website by a single developer – Geometrically. It remained relatively unnoticed for a couple of weeks, and then it started gaining attention. This new website has amazing search! Yup, the whole thing was primarily about making seamless, gracious, appeasing smart real-time search. The community is now intrigued.</p><h2>Becoming a team</h2><p>&quot;But this looks awful! And it's proprietary!&quot; – a few voices said. Among those voices were falseresync and MulverineX. They both had several objections to that and were pestering the original author. &quot;FOSS is the true way for community project&quot; and &quot;Just use a license to prevent others from creating instances of your work,&quot; they told.</p><p>Yet Fabricate remained proprietary for a while. However, once the pressure on the author became high, they gave up and open-sourced their work. This was the birth of Modrinth. It did not get its name for a little while longer though.</p><p>Now that Modrinth was open source, it started gaining traction. Remember falseresync and MulverineX? They joined Geometrically on the branding site, and somewhere in the middle of the brainstorming process the logo and the name were born. At the same time AppleTheGolden, Aeledfyr, and Redblueflame began contributing to the actual code of the project, which is – nowadays known to everyone – in Rust. A solo suddenly became a team, ready for whatever future holds.</p><h2>Development non-stop</h2><p>The newly born FOSS project is now evolving swiftly. Before our team arose the question: monolithic vs split app architecture. Monolithic would be easier to deploy and can serve pages quicker. The split architecture will simplify the development and allow for a feature-full user experience. The discussion was hot, and the sides were fierce. Nevertheless, the split pattern won. Now it was time to make proper backend and frontend apps.</p><p>The work first began with the backend. Aeled, Red, and Geo started detaching API methods from visuals. The team worked hard. Consequent to the API splitting from the GUI, it became getting new and exciting features. The first feature to be added was custom Modrinth mods – before that, the website only indexed the competitor's service.</p><p>However, for that to happen there had to be another step taken – migration from MongoDB to PostgreSQL. It was crucial for efficient data storage and complex relationships between projects. And the biggest propagator of that change was Apple, who introduced and successfully defended their case.</p><p>Thus, with custom mods, better yet search has been implemented. After search, user accounts with external log-in made their way into the project. Now it first creators started uploading their mods – a monumental achievement.</p><p>After the first creators came more – the community began taking Modrinth as a serious alternative hosting. At some point, uploads accelerated to the point that our team was forced to redo their plans and establish project editing and moderation considerably earlier than it could have been. Besides, creators need analytics, they need teams, they needed support system. So the backend developers tried their best to keep up and achieved their goals through enthusiastic labor and dedication.</p><h2>Refreshed look</h2><p>Although, on the frontend side things weren't as bright, unfortunately. Once falseresync presented the new look and feel Modrinth should aim for, he was forced to dedicate less time to the project. As a consequence, the frontend was implemented rather haphazardly and was lacking in features compared to the backend.</p><p>However, this did not stop the project from evolving. The backend team has continued to expand on existing features, and after a long period of time, the savior descended on the frontend – Prospector, who rapidly became a crucial contributor and a part of the team. With new and comprehensive design guidance from falseresync and critique from MulverineX and the community, Prospector achieved feature parity with backend and greatly improved the website look and feel.</p><p>Improving the frontend wasn't an easy job: naughty CSS, runtime errors, the abundance of framework-related nuances – all were obstacles, and all were defeated. Through battles with web technologies, jokes about quirky styles, and hard work our team created the UI you see today.</p><h2>Going beta</h2><blockquote><p>You have to believe that the dots will somehow connect in your future. <em>– Steve Jobs</em></p></blockquote><p>With the story complete, we are proud to announce that the Modrinth beta will be coming out on November 30th, with a refreshed look and a feature-complete modding website! It is a tremendous achievement for us and the community, which we are very proud of.</p><p>It is heart-warming to admit that we're finally going officially online. We know it's not perfect yet. But regardless, we will continue our passion project as a team, and we will expand on it and make it only better!</p><p>Stay tuned!</p>]]> - \ No newline at end of file + diff --git a/packages/api-client/src/modules/index.ts b/packages/api-client/src/modules/index.ts index 3f3c901dc..841679634 100644 --- a/packages/api-client/src/modules/index.ts +++ b/packages/api-client/src/modules/index.ts @@ -18,6 +18,7 @@ import { LabrinthAnalyticsV3Module } from './labrinth/analytics/v3' import { LabrinthAuthInternalModule } from './labrinth/auth/internal' import { LabrinthAuthV2Module } from './labrinth/auth/v2' import { LabrinthBillingInternalModule } from './labrinth/billing/internal' +import { LabrinthCampaignInternalModule } from './labrinth/campaign/internal' import { LabrinthCollectionsModule } from './labrinth/collections' import { LabrinthExternalProjectsInternalModule } from './labrinth/external-projects/internal' import { LabrinthGlobalsInternalModule } from './labrinth/globals/internal' @@ -80,6 +81,7 @@ export const MODULE_REGISTRY = { labrinth_auth_internal: LabrinthAuthInternalModule, labrinth_auth_v2: LabrinthAuthV2Module, labrinth_billing_internal: LabrinthBillingInternalModule, + labrinth_campaign_internal: LabrinthCampaignInternalModule, labrinth_collections: LabrinthCollectionsModule, labrinth_external_projects_internal: LabrinthExternalProjectsInternalModule, labrinth_globals_internal: LabrinthGlobalsInternalModule, diff --git a/packages/api-client/src/modules/labrinth/campaign/internal.ts b/packages/api-client/src/modules/labrinth/campaign/internal.ts new file mode 100644 index 000000000..4becefad6 --- /dev/null +++ b/packages/api-client/src/modules/labrinth/campaign/internal.ts @@ -0,0 +1,21 @@ +import { AbstractModule } from '../../../core/abstract-module' +import type { Labrinth } from '../types' + +export class LabrinthCampaignInternalModule extends AbstractModule { + public getModuleID(): string { + return 'labrinth_campaign_internal' + } + + /** + * Get Pride 2026 campaign fundraising progress. + * GET /_internal/campaign/pride-26 + */ + public async getPride26(): Promise { + return this.client.request('/campaign/pride-26', { + api: 'labrinth', + version: 'internal', + method: 'GET', + skipAuth: true, + }) + } +} diff --git a/packages/api-client/src/modules/labrinth/types.ts b/packages/api-client/src/modules/labrinth/types.ts index b582a5f34..ab79ac6f1 100644 --- a/packages/api-client/src/modules/labrinth/types.ts +++ b/packages/api-client/src/modules/labrinth/types.ts @@ -1,6 +1,17 @@ +import type { RawDecimal } from '../../utils/types' import type { ISO3166 } from '../iso3166/types' export namespace Labrinth { + export namespace Campaign { + export namespace Internal { + export type CampaignInfo = { + total_donations_usd: RawDecimal + target_usd: RawDecimal + num_donators: number + } + } + } + export namespace Billing { export namespace Internal { export type PriceDuration = 'five-days' | 'monthly' | 'quarterly' | 'yearly' @@ -1025,6 +1036,7 @@ export namespace Labrinth { icon_url: string | null color: number | null members: Projects.v3.TeamMember[] + moderation_notes?: Users.Common.ModerationNote | null } export type CreateOrganizationRequest = { @@ -1249,7 +1261,7 @@ export namespace Labrinth { } export namespace Users { - namespace Common { + export namespace Common { export type Role = 'developer' | 'moderator' | 'admin' export type AuthProvider = @@ -1267,6 +1279,15 @@ export namespace Labrinth { venmo_handle?: string balance: number } + + export type ModerationNote = { + notes: string + last_modified: string + created_at: string + last_author: string + user_rating: number + version: number + } } export namespace v2 { @@ -1316,6 +1337,7 @@ export namespace Labrinth { created: string role: Role badges: number + campaigns: UserCampaigns auth_providers?: AuthProvider[] email?: string email_verified?: boolean @@ -1324,7 +1346,7 @@ export namespace Labrinth { payout_data?: UserPayoutData stripe_customer_id?: string allow_friend_requests?: boolean - campaigns: UserCampaigns + moderation_notes?: Common.ModerationNote | null github_id?: number } diff --git a/packages/api-client/src/modules/labrinth/users/v3.ts b/packages/api-client/src/modules/labrinth/users/v3.ts index 92bc2557c..1f2088903 100644 --- a/packages/api-client/src/modules/labrinth/users/v3.ts +++ b/packages/api-client/src/modules/labrinth/users/v3.ts @@ -6,6 +6,18 @@ export class LabrinthUsersV3Module extends AbstractModule { return 'labrinth_users_v3' } + /** + * Get the authenticated user. + * GET /v3/user + */ + public async getAuthenticated(): Promise { + return this.client.request('/user', { + api: 'labrinth', + version: 3, + method: 'GET', + }) + } + /** * Get a user by ID or username * diff --git a/packages/app-lib/src/api/minecraft_skins/assets/default/default_skins.rs b/packages/app-lib/src/api/minecraft_skins/assets/default/default_skins.rs index 669fa24ec..bef2f5237 100644 --- a/packages/app-lib/src/api/minecraft_skins/assets/default/default_skins.rs +++ b/packages/app-lib/src/api/minecraft_skins/assets/default/default_skins.rs @@ -6,6 +6,7 @@ use crate::{minecraft_skins::SkinSource, state::MinecraftSkinVariant}; use super::super::super::Skin; +const MODRINTH_PRIDE_SKIN_PACK_SECTION: &str = "Modrinth Pride"; const DEFAULT_SKINS_SECTION: &str = "Default skins"; const MINECON_EARTH_2017_SKIN_PACK_SECTION: &str = "MINECON Earth 2017"; const BUILDERS_AND_BIOMES_SKIN_PACK_SECTION: &str = "Builders & Biomes"; @@ -16,14 +17,122 @@ const THE_COPPER_AGE_SKIN_PACK_SECTION: &str = "The Copper Age"; const MOUNTS_OF_MAYHEM_SKIN_PACK_SECTION: &str = "Mounts of Mayhem"; const TINY_TAKEOVER_SKIN_PACK_SECTION: &str = "Tiny Takeover"; -/// A list of default Minecraft skins to make available to the user, created by Mojang. +/// A list of bundled Minecraft skins to make available to the user. pub static DEFAULT_SKINS: LazyLock> = LazyLock::new(|| { // - // The skins below are available in the vanilla Minecraft launcher, and were found + // The Mojang skins below are available in the vanilla Minecraft launcher, and were found // by reverse engineering the behavior of the Minecraft launcher. The textures are // publicly available at `https://textures.minecraft.net/texture/`. // vec![Skin { + texture_key: Arc::from("local-cb3974d16e88a6bd1fe91b0bd58aa5a89abc01f66aed0efc732b84091a523fc9"), + name: Some(Arc::from("Mr. Pack - Asexual")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-017ef388aa15a32c47af5b6230c0969085c30e2a884e8853fb449bcdcb60d6f4"), + name: Some(Arc::from("Mr. Pack - Bisexual")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-6721474dc24f7ebfac096c3df0bbc0ff7bd3d7d63e8bce13754b0db9acab3805"), + name: Some(Arc::from("Mr. Pack - Genderfluid")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-7f01d162a7dedfd0e1bf1a03533ca9eecd8105dd1008e3297ff9d9d8b1582b8c"), + name: Some(Arc::from("Mr. Pack - Intersex")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-9417023c7f4674feff1592df3cab3bea791a2dd2bc453eb03033859fbf9483f9"), + name: Some(Arc::from("Mr. Pack - Lesbian")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-88b4e9d37f25f947c12dfc5c354af30601016cf852e90681633c92b750e43761"), + name: Some(Arc::from("Mr. Pack - MLM")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-8fcc36625f7b7ce18362ab5eaec276653f26af331f4ec38d00a610c93da69640"), + name: Some(Arc::from("Mr. Pack - Nonbinary")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-7cc8f7620b66002be6e531ac0f90f050eca831d7827a66c01cf6256b0a4f936e"), + name: Some(Arc::from("Mr. Pack - Pride")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { + texture_key: Arc::from("local-2674d92834203a9fc2b3c435fc8c89fb68de8c62eac674b885c1fe7868ab04b6"), + name: Some(Arc::from("Mr. Pack - Transgender")), + section: Some(Arc::from(MODRINTH_PRIDE_SKIN_PACK_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, + Skin { texture_key: Arc::from("46acd06e8483b176e8ea39fc12fe105eb3a2a4970f5100057e9d84d4b60bdfa7"), name: Some(Arc::from("Alex")), section: Some(Arc::from(DEFAULT_SKINS_SECTION)), @@ -239,6 +348,18 @@ pub static DEFAULT_SKINS: LazyLock> = LazyLock::new(|| { source: SkinSource::Default, is_equipped: false, }, + Skin { + texture_key: Arc::from("local-8776f8b6615e2051b3da182b8208ae8700254d3cc49eac36aef85f7577c85e4a"), + name: Some(Arc::from("Mr. Pack")), + section: Some(Arc::from(DEFAULT_SKINS_SECTION)), + variant: MinecraftSkinVariant::Classic, + cape_id: None, + texture: Arc::from(Url::try_from( + "data:image/png;base64,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" + ).unwrap()), + source: SkinSource::Default, + is_equipped: false, + }, // // The skins below come from free skin packs released by Mojang for Java Edition players. // diff --git a/packages/app-lib/src/state/settings.rs b/packages/app-lib/src/state/settings.rs index 813580333..023924aee 100644 --- a/packages/app-lib/src/state/settings.rs +++ b/packages/app-lib/src/state/settings.rs @@ -58,6 +58,7 @@ pub enum FeatureFlag { ServerRamAsBytesAlwaysOn, AlwaysShowAppControls, SkipUnknownPackWarning, + PrideFundraiser, ServersInApp, ServerProjectQa, I18nDebug, diff --git a/packages/assets/styles/classes.scss b/packages/assets/styles/classes.scss index e2018245a..ba9388eaa 100644 --- a/packages/assets/styles/classes.scss +++ b/packages/assets/styles/classes.scss @@ -700,10 +700,10 @@ a:not(.no-click-animation), .v-popper--theme-tooltip { .v-popper__inner { - background: var(--surface-3) !important; - color: var(--color-contrast) !important; + background: var(--color-tooltip-bg) !important; + color: var(--color-tooltip-text) !important; padding: 0.625rem 0.75rem !important; - border-radius: 12px !important; + border-radius: var(--radius-sm) !important; filter: drop-shadow(2px 2px 0.4rem rgba(0, 0, 0, 0.5)); font-size: 0.9rem; font-weight: 500; @@ -730,7 +730,6 @@ a:not(.no-click-animation), color: var(--color-tooltip-text) !important; padding: 0.75rem 1rem !important; border-radius: 0.75rem !important; - filter: drop-shadow(5px 5px 0.8rem rgba(0, 0, 0, 0.35)); font-size: 0.9rem; font-weight: bold; line-height: 1; diff --git a/packages/assets/styles/variables.scss b/packages/assets/styles/variables.scss index 112cace44..fdcb7bbab 100644 --- a/packages/assets/styles/variables.scss +++ b/packages/assets/styles/variables.scss @@ -199,8 +199,8 @@ html { --radius-xl: 1.25rem; --radius-max: 999999999px; - --color-tooltip-text: var(--dark-color-contrast); - --color-tooltip-bg: #000; + --color-tooltip-text: var(--color-contrast); + --color-tooltip-bg: var(--surface-3); --color-ad: rgba(125, 75, 162, 0.2); --color-ad-raised: rgba(190, 140, 243, 0.5); diff --git a/packages/blog/articles/pride-campaign-2026.md b/packages/blog/articles/pride-campaign-2026.md new file mode 100644 index 000000000..2a74015d6 --- /dev/null +++ b/packages/blog/articles/pride-campaign-2026.md @@ -0,0 +1,55 @@ +--- +title: 'Pride 2026 Fundraiser: Matching up to $5,000' +short_title: Pride 2026 Fundraiser +summary: Celebrating our community and working together to make a difference. +short_summary: Celebrating our community and working together to make a difference. +date: 2026-06-01T12:00:00-04:00 +--- + +## Happy Pride Month! + +Pride is a time for celebration, self-expression, and community. Queer individuals are part of Modrinth at every level: across our team, our creator community, and the wider Minecraft community as a whole. We're very proud to be vocal in our support for LGBTQIA+ rights all year round. + +But for many people, Pride is a celebration that comes with great risk. Recent reporting shows there's no shortage of tragedies facing LGBTQIA+ people. Threats, attacks, and even worse happen around the world - [Juniper Blessing](https://www.yahoo.com/news/articles/most-amazing-human-being-ever-024305055.html) and [Shyyell Diamond Sanchez-McCray](https://www.advocate.com/news/crime/black-drag-artist-virginia-murdered), trans rights activists [Zehrish Khanzadi and Bindiya Rana](https://www.theguardian.com/global-development/2026/jan/27/pakistan-transgender-attacks-killings) surviving gunfire in Pakistan, and [many more](https://en.wikipedia.org/wiki/List_of_acts_of_violence_against_LGBTQ_people) cases like these are reminders that safety is not guaranteed for some members of our community. + +That's why this Pride Month, Modrinth will be running a fundraiser supporting [**Rainbow Railroad**](https://www.rainbowrailroad.org/). + +Rainbow Railroad works with LGBTQIA+ people who are facing danger, helping to connect them with support, resources, and pathways to safe countries. Through their **Solidarity in Pride 2026** campaign, they're raising funds to help at-risk LGBTQIA+ people access safety when staying in place is no longer an option. + +You can support the fundraiser here. + +**When donating, please enter your _Modrinth username_ as the _Tiltify display name_ so we can apply any eligible rewards to your account!** + +## Donation Matching Commitment + +We want to maximize the impact our community can make. + +To help achieve this, we've committed to matching all donations 1:1 until our fundraising goal of $5,000 has been met. + +## Donor Rewards + +This year, we will also be providing rewards as a small thank you to everyone who supports the fundraiser. Including a few limited rewards specific to this year's fundraiser! + +### Pride Badge 2026 & Pride Skins + +Everyone who donates will receive a special Pride 2026 profile badge on Modrinth. + + + +Supporters with this badge will also unlock a special Pride section in the Skin selector in the Modrinth App featuring the incredibly cute Mr. Pack in Pride-themed, exclusive Modrinth skins: + +![Mr. Pack Pride skins](./mrpack-pride-banner.webp) + +### Modrinth+ + +Donations of $5 (USD) or more will grant you with free [Modrinth+](https://modrinth.com/plus) benefits for 1 month as an additional thank-you - available to users who do not already have an active Modrinth+ subscription. + +## Pride Collection 2026 + +Alongside the fundraiser, we're also launching the [Modrinth Pride Collection!](https://modrinth.com/collection/M4c3ITvd) + +This collection highlights projects made by and for the queer community, including mods, resource packs, modpacks, plugins, and more across Modrinth. + +[**You can submit projects all month long**](https://tally.so/r/GxQBbO) + +Throughout June, we'll be featuring selected projects from the collection across our social media alongside our usual creator spotlights. Pride is about visibility, and we want to use this month to celebrate the LGBTQIA+ creators and communities that help make Modrinth what it is. diff --git a/packages/blog/compiled/index.ts b/packages/blog/compiled/index.ts index 3a6b6aca2..02f29ff7e 100644 --- a/packages/blog/compiled/index.ts +++ b/packages/blog/compiled/index.ts @@ -27,6 +27,7 @@ import { article as new_environments } from "./new_environments"; import { article as new_site_beta } from "./new_site_beta"; import { article as plugins_resource_packs } from "./plugins_resource_packs"; import { article as pride_campaign_2025 } from "./pride_campaign_2025"; +import { article as pride_campaign_2026 } from "./pride_campaign_2026"; import { article as redesign } from "./redesign"; import { article as russian_censorship } from "./russian_censorship"; import { article as skins_now_in_modrinth_app } from "./skins_now_in_modrinth_app"; @@ -67,6 +68,7 @@ export const articles = [ new_site_beta, plugins_resource_packs, pride_campaign_2025, + pride_campaign_2026, redesign, russian_censorship, skins_now_in_modrinth_app, diff --git a/packages/blog/compiled/pride_campaign_2026.content.ts b/packages/blog/compiled/pride_campaign_2026.content.ts new file mode 100644 index 000000000..8006b44e1 --- /dev/null +++ b/packages/blog/compiled/pride_campaign_2026.content.ts @@ -0,0 +1,2 @@ +// AUTO-GENERATED FILE - DO NOT EDIT +export const html = `

Happy Pride Month!

Pride is a time for celebration, self-expression, and community. Queer individuals are part of Modrinth at every level: across our team, our creator community, and the wider Minecraft community as a whole. We're very proud to be vocal in our support for LGBTQIA+ rights all year round.

But for many people, Pride is a celebration that comes with great risk. Recent reporting shows there's no shortage of tragedies facing LGBTQIA+ people. Threats, attacks, and even worse happen around the world - Juniper Blessing and Shyyell Diamond Sanchez-McCray, trans rights activists Zehrish Khanzadi and Bindiya Rana surviving gunfire in Pakistan, and many more cases like these are reminders that safety is not guaranteed for some members of our community.

That's why this Pride Month, Modrinth will be running a fundraiser supporting Rainbow Railroad.

Rainbow Railroad works with LGBTQIA+ people who are facing danger, helping to connect them with support, resources, and pathways to safe countries. Through their Solidarity in Pride 2026 campaign, they're raising funds to help at-risk LGBTQIA+ people access safety when staying in place is no longer an option.

You can support the fundraiser here.

When donating, please enter your Modrinth username as the Tiltify display name so we can apply any eligible rewards to your account!

Donation Matching Commitment

We want to maximize the impact our community can make.

To help achieve this, we've committed to matching all donations 1:1 until our fundraising goal of $5,000 has been met.

Donor Rewards

This year, we will also be providing rewards as a small thank you to everyone who supports the fundraiser. Including a few limited rewards specific to this year's fundraiser!

Pride Badge 2026 & Pride Skins

Everyone who donates will receive a special Pride 2026 profile badge on Modrinth.

Supporters with this badge will also unlock a special Pride section in the Skin selector in the Modrinth App featuring the incredibly cute Mr. Pack in Pride-themed, exclusive Modrinth skins:

Mr. Pack Pride skins

Modrinth+

Donations of $5 (USD) or more will grant you with free Modrinth+ benefits for 1 month as an additional thank-you - available to users who do not already have an active Modrinth+ subscription.

Pride Collection 2026

Alongside the fundraiser, we're also launching the Modrinth Pride Collection!

This collection highlights projects made by and for the queer community, including mods, resource packs, modpacks, plugins, and more across Modrinth.

You can submit projects all month long

Throughout June, we'll be featuring selected projects from the collection across our social media alongside our usual creator spotlights. Pride is about visibility, and we want to use this month to celebrate the LGBTQIA+ creators and communities that help make Modrinth what it is.

`; diff --git a/packages/blog/compiled/pride_campaign_2026.ts b/packages/blog/compiled/pride_campaign_2026.ts new file mode 100644 index 000000000..27a52b832 --- /dev/null +++ b/packages/blog/compiled/pride_campaign_2026.ts @@ -0,0 +1,13 @@ +// AUTO-GENERATED FILE - DO NOT EDIT +export const article = { + html: () => import(`./pride_campaign_2026.content`).then(m => m.html), + title: "Pride 2026 Fundraiser: Matching up to $5,000", + summary: "Celebrating our community and working together to make a difference.", + date: "2026-06-01T16:00:00.000Z", + slug: "pride-campaign-2026", + authors: [], + unlisted: false, + thumbnail: true, + short_title: "Pride 2026 Fundraiser", + short_summary: "Celebrating our community and working together to make a difference.", +}; diff --git a/packages/blog/public/pride-campaign-2026/mrpack-pride-banner.webp b/packages/blog/public/pride-campaign-2026/mrpack-pride-banner.webp new file mode 100644 index 000000000..dec24a621 Binary files /dev/null and b/packages/blog/public/pride-campaign-2026/mrpack-pride-banner.webp differ diff --git a/packages/blog/public/pride-campaign-2026/pride-badge.webp b/packages/blog/public/pride-campaign-2026/pride-badge.webp new file mode 100644 index 000000000..c72207512 Binary files /dev/null and b/packages/blog/public/pride-campaign-2026/pride-badge.webp differ diff --git a/packages/blog/public/pride-campaign-2026/thumbnail.webp b/packages/blog/public/pride-campaign-2026/thumbnail.webp new file mode 100644 index 000000000..f8b1e231c Binary files /dev/null and b/packages/blog/public/pride-campaign-2026/thumbnail.webp differ diff --git a/packages/ui/src/components/skin/SkinButton.vue b/packages/ui/src/components/skin/SkinButton.vue index 35bf60887..0ab42911d 100644 --- a/packages/ui/src/components/skin/SkinButton.vue +++ b/packages/ui/src/components/skin/SkinButton.vue @@ -49,14 +49,14 @@ watch(