Johanna Puff stammt aus Raubling. Sie startet für den SC Bayrischzell und trainiert am Stützpunkt Ruhpolding in der Chiemgau-Arena seit 2026 in der Gruppe von Andreas Stitzl. Zuvor wurde sie dort mehrere Jahre von Andreas Birnbacher betreut. Nach ihrem Abitur 2020 absolvierte sie im Rahmen der Spitzensportförderung eine Ausbildung bei der Bundespolizei, die sie 2024 als Polizeimeisterin abschloss.
Puff betrieb zunächst Skilanglauf. Dort gehörte sie zu den besten Sportlerinnen ihres Jahrgangs in Deutschland; 2015/16 und 2016/17 gewann sie Gesamtwertung des Deutschen Schülercups in ihrer Altersklasse. 2017 entschied sie sich, zum Biathlon zu wechseln. Bereits ihre ersten beiden Rennen im Dezember desselben Jahrs im Alpencup in Martell gewann sie. Im weiteren Verlauf des Winters siegte sie bei drei weiteren Rennen im Deutschlandpokal. Am Ende der Saison 2017/18 gewann sie die Gesamtwertung der Altersklasse 16. In der Folge wurde sie vom Deutschen Skiverband erstmals in den Nachwuchskader aufgenommen. In der Saison 2018/19 knüpfte sie an die Leistungen des Vorjahres an. Mit sechs Siegen in 13 Rennen gewann sie erneut die Deutschlanpokal-Gesamtwertung, diesmal in der Altersklasse 17.
Nach guten Ergebnissen beim Deutschlandpokal in Martell im Dezember 2019 wurde Puff Anfang Januar 2020 erstmals für einen internationalen Wettkampf, die Olympischen Jugend-Winterspiele nominiert, bei denen sie mit Platz fünf im Einzel und Platz vier im Sprint die Medaillenränge knapp verpasste. Zehn Tage später nahm sie in der Jugendkategorie an den Juniorenweltmeisterschaften in der schweizerischen Lenzerheide teil, wo sie Bronze mit der Staffel gewann. In Sprint und Verfolgung erreichte sie keine vordere Platzierung. Zum Ende der Saison gewann sie im Februar beide Deutschlandpokal-Rennen in Ruhpolding.
In der Saison 2020/21 wurden aufgrund der COVID-19-Pandemie in Deutschland alle Rennen auf nationaler Ebene abgesagt. Aufgrund interner Leistungen wurde Puff für die Jugend-Rennen der Junioren-WM in Obertilliach nominiert. In den Einzelrennen steigerte sie sich im Vergleich zu 2020, die Staffel erreichte allerdings nur Platz vier.
Zur Saison 2021/22 wechselte Johanna Puff vom Jugend- in den Juniorenbereich und startete im IBU-Junior-Cup. Dort erreichte sie von Beginn an Ergebnisse im vorderen Bereich und gewann im Dezember 2021 in Martell ein Supersprint-Rennen und bei den Junioreneuropameisterschaften auf der Pokljuka im Januar 2022 gemeinsam mit Darius Lodl Gold in der Single-Mixed-Staffel. Nach diesen Ergebnissen wurde Puff für die Juniorenweltmeisterschaften im amerikanischen Soldier Hollow nominiert, wo sie in den Einzelrennen nicht an die Vorleistungen aus dem Junior-Cup anknüpfen konnte und außerhalb der Top Ten landete. Als Startläuferin der Staffel gewann sie jedoch zum Abschluss der Wettkämpfe die Silbermedaille. Die Gesamtwertung des IBU-Junior-Cups beendete sie auf Rang zwei.
Im November 2022 qualifizierte sich Puff bei internen Rennen für die Saisoneröffnung des IBU-Cups; allerdings musste sie ihren Start krankheitsbedingt absagen, woraufhin sie ihre offizielle Wettkampfsaison erneut im Junior-Cup begann. Dort knüpfte sie mit Siegen und Podestplätzen an die Leistungen aus der Vorsaison an. Bei den Juniorenweltmeisterschaften 2023 im kasachischen Schtschutschinsk waren ihre Einzelergebnisse mit den Plätzen 30, 15 und 14 erneut schwächer als im Junior-Cup. Mit der Staffel und der erstmals ausgetragenen Mixed-Staffel gewann Puff die jeweiligen Rennen und wurde somit erstmals Juniorenweltmeisterin. In der Junior-Cup-Gesamtwertung wurde sie erneut Zweite.
Zu Beginn der Saison 2023/24 qualifizierte sich Johanna Puff wie im Vorjahr bei der internen Ausscheidung für den IBU-Cup. Beim Saisonauftakt in Kontiolahti gab sie somit ihr Debüt im internationalen Erwachsenenbereich. Bereits in ihren ersten beiden Rennen erreichte sie die Plätze sechs und neun. Beim zweiten IBU-Cup in Idre gewann sie im Sprint bereits bei ihrem dritten Einzelstart ihr erstes Rennen. Daraufhin wurde sie nach krankheitsbedingten Ausfällen von Hanna Kebinger und Anna Weidel für den Weltcup in der Lenzerheide nominiert, bei dem sie im Sprint als 61. knapp die Qualifikation für die Verfolgung verpasste.
Im Januar 2024 startete Puff zunächst wieder im IBU-Cup. In Martell verbesserte sie sich von Platz 17 im Sprint auf Platz drei in der Verfolgung. In der Folgewoche in Ridnaun gewann sie nach Platz fünf im Sprint mit fehlerfreiem Schießen den Massenstart und erreichte somit ihren zweiten Saisonsieg. Mit diesen Leistungen durfte sie in Antholz erneut im Weltcup starten, wo sie als 35. des Kurz-Einzels erstmals in die Punkteränge kam.
Bei den Biathlon-Weltmeisterschaften 2024 in Nové Město na Moravě war Puff als Ersatzläuferin vor Ort und erhielt keinen Renneinsatz. Nach den Weltmeisterschaften qualifizierte sie sich beim Weltcup in Oslo als 18. im Einzel erstmals für einen Massenstart. Diesen beendete sie auf Platz 23. In Soldier Hollow erreichte sie als 62. im Sprint nicht die Verfolgung, beim Saisonfinale in Canmore wurde sie 28. und 32.
Zum Sommer 2024 wurde Johanna Puff vom Deutschen Skiverband in die Lehrgangsgruppe 1a, d. h. die A-Nationalmannschaft, aufgenommen. Bei den Deutschen Meisterschaften in Altenberg gewann sie mit Silber im Einzel ihre erste Medaille im Erwachsenenbereich.
Im November 2024 qualifizierte Puff sich bei internen Rennen in Vuokatti für den Weltcupauftakt in Kontiolahti. Dort lief sie nach Einsätzen in der Mixed- und der Frauenstaffel im Einzel auf Platz 74. Danach konnte sie krankheitsbedingt im Sprint nicht starten und lief in der Folge im gesamten Dezember keine weiteren Rennen. Anfang Januar erreichte sie beim IBU-Cup am Arber zwei 16. Plätze.
Ende Januar startete Puff, nachdem sie kurzfristig in der Weltcupstaffel in Antholz zum Einsatz gekommen war, bei den Europameisterschaften in Martell. Dort gewann sie mit fehlerfreiem Schießen das Einzel und erreichte somit ihre erste Medaille im internationalen Erwachsenenbereich. In Sprint und Verfolgung belegte sie ebenfalls fehlerfrei die Plätze sieben und neun. Mit der deutschen Staffel gewann sie als Schlussläuferin eine zweite Goldmedaille. Nach den Leistungen bei der EM wurde sie vom Deutschen Skiverband für die Weltmeisterschaften in Lenzerheide nominiert. Dort erhielt sie einen Einsatz im Einzel und erreichte mit fehlerfreiem Schießen Platz 22.
Nach der WM startete Puff beim Weltcup in Nové Město na Moravě. Dort war sie nach Platz 60 und 49 in den Einzelrennen erstmals Teil der deutschen Staffel und erreichte mit dieser als Dritte ihren ersten Podestplatz. In der Folgewoche auf der Pokljuka lief sie im Einzel als 26. das einzige Mal in diesem Winter in die Weltcuppunkte. Beim Saisonfinale in Oslo wurde sie 43. und 54 in Sprint und Verfolgung.
In der Saisonvorbereitung 2025/26 war Johanna Puff weiterhin Teil der Lehrgangsgruppe 1a des DSV. Aufgrund körperlicher Probleme konnte sie zeitweise nur eingeschränkt trainieren. Zudem zog sie sich bei einem Fahrradsturz einen Bruch des Handgelenks zu, weshalb sie die Deutschen Meisterschaften im September auslassen musste. Anfang November erkrankte sie an einem Magen-Darm-Infekt, aufgrund dessen sie das Vorbereitungstrainingslager der Nationalmannschaft in Schweden verpasste.[1] An der deutschen Weltcupqualifikation Ende des Monats konnte sie wieder teilnehmen. Sie verpasste nach zwei Rennen als Zehnte der Rangliste einen der beiden noch freien Plätze in der Mannschaft.
Beim Auftakt des IBU-Cups Anfang Dezember in Obertilliach belegte Puff in zwei Sprints die Plätze 50 und 46. Bei der an den zweiten Sprint anschließenden Verfolgung brach sie nach dem ersten Schießen auf der Strecke zusammen und wurde mit einem Krankenwagen abtransportiert. In der Folge wurde bei ihr nach mehreren Untersuchungen eine Myokarditis diagnostiziert, aufgrund derer sie die Saison bereits vor Weihnachten beenden musste.
Nach der Herzmuskelentzündung konnte Johanna Puff Anfang März 2026 wieder mit leichtem Training beginnen. Für die Sommervorbereitung 2026 stufte der DSV sie aufgrund ihres krankheitsbedingten Ausfalls in der Vorsaison in die B-Mannschaft zurück. Diese wurde zeitgleich neu von Andreas Stitzl übernommen, der auch Puffs Heimtrainer in Ruhpolding wurde. Bei den Deutschen Meisterschaften Anfang September am Notschrei absolvierte sie ihre ersten Rennen nach der Krankheit. Sie gewann dabei in allen drei Rennen (Einzel, Sprint, Verfolgung) jeweils hinter Janina Hettich-Walz die Silbermedaille.