# Samuel E. Edusa, MD — Full Site Content Complete plain-text mirror of https://samueledusa.com for AI agents and language models: canonical bio, every resume section (experience, education, certifications, awards, publications, presentations, volunteering, skills, languages, hobbies, and projects) for both the medicine and software profiles, plus the full text of every blog article. Generated 2026-08-14T00:45:40.160Z. ## Canonical Bio Physician and AI/software engineer working at the intersection of clinical medicine and applied AI. He is Chief Resident in Internal Medicine at SGMC Health (ABIM board-eligible June 2027), an Alpha Omega Alpha inductee, co-chair of the American College of Physicians Georgia Chapter Resident Council, and an editorial board member of The Hospitalist. He is co-founder of Super Genius Labs, where he builds agentic and voice AI systems including Genius Care, an AI voice receptionist for healthcare practices, and he performs in-home health evaluations as a physician with Signify Health (a CVS Health company). His broader work spans acute inpatient medicine, point-of-care ultrasound, healthcare AI, clinical informatics, Epic EMR optimization, and agentic systems that reduce physician burnout while preserving human-centered care. ## Areas of Expertise - Healthcare AI - Clinical Informatics - Agentic AI - Voice AI Agents - Epic EMR - Internal Medicine - Large Language Models - AI Workflow Automation - Retrieval-Augmented Generation - Medical Education - Physician Burnout Reduction ## Medicine Overview Internal medicine physician completing residency in June 2027 and board-eligible with the ABIM. Holds a full, unrestricted Georgia license and brings more than a decade of direct patient care across independent practice and U.S. residency training. Serves as Chief Resident at SGMC Health and co-chairs the ACP Georgia Chapter Resident Council. Named Intern of the Year and inducted into Alpha Omega Alpha. Publishes and presents regularly, serves on the editorial board of The Hospitalist, and teaches residents and medical students. Pairs Epic physician-builder experience with a software-engineering background to build clinical tools and AI systems that make care safer and lighten the documentation load. Areas of interest: acute inpatient medicine, admissions & cross-coverage, critical & step-down care, rapid response & codes (ACLS), point-of-care ultrasound, transitions of care, quality improvement, clinical informatics (Epic). ## Clinical & Professional Experience ### Chief Resident SGMC Health · (Valdosta, GA) · Dec 2025 - present https://www.sgmc.org/ Selected by peers and academic staff to serve as liaison between residents and faculty, coordinate educational activities and conferences, mentor junior residents, assist with recruitment and orientation, and contribute to curriculum development and quality improvement initiatives. ### Resident Representative, Medical Records Committee SGMC Health · (Valdosta, GA) · October 2025 - present https://www.sgmc.org/ Review and develop standard order sets and protocols in collaboration with hospital IT and EMR vendors, ensure medical records completion and quality standards, recommend policies to the Medical Executive Committee, and assist with implementation of adopted processes and procedures. ### Simulation Lab Instructor SGMC Health · (Valdosta, GA) · September - present https://www.sgmc.org/ Provided hands-on clinical skills training to fellow residents and medical students using high-fidelity manikins and advanced simulation technology at SGMC Health's state-of-the-art simulation lab Read announcement: https://www.sgmc.org/mercer-university-school-of-medicine-and-sgmc-health-celebrate-opening-of-valdosta-clinical-campus-and-simulation-lab/ ### Epic ASAP Physician Trainer SGMC Health · (Valdosta, GA) · July 2025 - present https://www.sgmc.org/ Trained first-year residents on the Epic ASAP emergency medicine module functionality to prepare them for their emergency department rotations. About Epic ASAP: https://www.epic.com/software/specialties/ ### Internal Medicine Resident Physician SGMC Health · (Valdosta, GA) · July 2024 - present https://www.sgmc.org/ Admit and manage a full inpatient census of undifferentiated, multi-system acute illness — from ED admission through daily management, cross-cover, overnight triage, and safe discharge. Provide critical and step-down care, respond to rapid responses and codes, lead multidisciplinary rounds with nursing, pharmacy, and case management, and perform point-of-care ultrasound and common bedside procedures. ### Epic & Clinical Informatics SGMC Health · (Valdosta, GA) https://www.sgmc.org/ Helped implement Epic's "Notify Me" result notifications for residents and designed a hospital-wide Physician Communication note type, reducing missed follow-ups and streamlining inpatient documentation. Optimized the tube feed order set with dietitian SmartPhrases and built standardized resident note templates for H&Ps, progress notes, and discharge summaries. ### Resident Council Co-Chair American College of Physicians, Georgia Chapter · (Remote) · July 2026 - present https://www.acponline.org/about-acp/chapters-regions/united-states/georgia-chapter/about-the-chapter/chapter-committees Leading statewide resident engagement and advocacy initiatives for the American College of Physicians Georgia Chapter Resident Council. Representing trainee perspectives in policy and professional-development discussions. ### Resident Council Head of Social Media American College of Physicians, Georgia Chapter · (Remote) · July 2025 - 2026 https://www.acponline.org/about-acp/chapters-regions/united-states/georgia-chapter/about-the-chapter/chapter-committees Managing official social media accounts of the Georgia ACP Resident Council, creating graphics, attending meetings for photo ops, and engaging the community through posts about data, voting, and resident interests while serving as an advocate and recruiter. ### ACP Leadership Day 2026 at Capitol Hill American College of Physicians, Georgia Chapter · (Remote) · May 2026 https://www.acponline.org/about-acp/chapters-regions/united-states/georgia-chapter/about-the-chapter/chapter-committees Represented South Georgia during the 2026 ACP Leadership Day on Capitol Hill in Washington, DC. ### Editorial Board Member The Hospitalist (Society of Hospital Medicine) · (Remote) · Apr 2026 - Apr 2028 https://www.the-hospitalist.org/ Serving a two-year term contributing articles, sources, and ideas to help the editorial team deliver timely and relevant content for hospitalists nationwide. Read announcement: https://www.the-hospitalist.org/hospitalist/article/40855/leadership/the-hospitalist-welcomes-new-board-members-2026/ ### Clinical Educator (Full-time faculty) Mercer University School of Medicine · (Valdosta, GA) · Aug 2024 - present https://medicine.mercer.edu/ Instructed medical students from Mercer University School of Medicine during their internal medicine rotations at SGMC Health. ### Physician – In-Home Health Evaluations Signify Health (a CVS Health company) · (Valdosta, GA) · 2026 - present https://www.signifyhealth.com/careers-resident Perform comprehensive in-home health evaluations for Medicare Advantage, Medicaid, and commercial plan members, identifying chronic conditions and gaps in care, assessing overall health and barriers to care, and documenting clinical and social needs to coordinate appropriate follow-up services. ### Co-founder & AI Engineer Super Genius Labs · (Remote) · 2026 - present https://supergeniuslabs.ai/ Co-founded a startup building AI agent teams that automate operations businesses would otherwise hire staff for, leading development of Genius Care, an AI voice receptionist that answers healthcare practices' calls 24/7, verifies insurance, and books appointments directly into the EMR. View software experience: /software ### General Practitioner (Remote & On-Site) Samalla Clinic Ltd. · (New Gbawe, Accra. Ghana & Remote) · Jun 2013 - present https://www.samallaclinicltd.com/board-of-directors/dr_samuel_edusa Provided outpatient, inpatient, and emergency care while performing bedside lab tests and antenatal ultrasounds. Managed telehealth services, technical infrastructure, website development, and created medical billing software for remote billing. ### Remote Research Collaborator Outcomes Research Group · (Remote) · Feb 2022 - present https://www.researchgate.net Participated in workshops and completed coursework on conducting retrospective studies using national databases, meta-analyses, and biostatistics while collaborating remotely with research teams to develop topics, formulate hypotheses, and submit abstracts to scientific conferences. Conducted literature reviews via PubMed, Google Scholar, and conference websites before finalizing research questions, extracted and validated data for Excel tables developed collaboratively, and drafted, edited, and proofread abstracts to meet submission requirements while assisting with PowerPoint preparations for conference posters. ### Software Engineer (Remote) Tin Roof Software & Cognizant Softvision · (Remote & Atlanta, GA. USA.) · Mar 2018 - June 2023 https://news.cognizant.com/2020-08-25-Cognizant-to-Acquire-Tin-Roof-Software-to-Expand-Digital-Engineering-Services Developed web and mobile features as full-stack engineer for healthcare, media, and retail clients; led a small engineering team, mentored interns, presented React topics at weekly meetings, and demonstrated new functionality to clients during go-lives. ### Clinical Extern Southern Regional Medical Center · (Riverdale, GA. USA.) · Jun 2022 - Sept 2022 https://www.southernregional.org/ Took patient histories and performed physical exams in ICU, Telemetry floor, and general ward; discussed management plans with supervising internist and intensivist. ### Medical Officer Nyaho Medical Centre · (Airport residential area, Accra. Ghana) · Jun 2012 - Jul 2013 https://www.nyahomedical.com/ Provided emergency, inpatient, and outpatient care; assessed and implemented patient management plans; coordinated specialized care referrals; participated in clinical meetings and rounds; created physician schedules for emergency department. ### Internal Medicine House Officer Greater Accra Regional Hospital · (Ridge, Accra. Ghana) · Dec 2011 - Jun 2012 https://garh.gov.gh/ Managed patients across emergency, outpatient, and ward settings; performed various medical procedures; presented cases and journal articles at meetings; prepared duty rosters. Housemanship Guidelines: /view-pdf?file=Guidelines_For_Housemanship_In_Ghana_MDC-2015.pdf&folder=certificates ### Obstetrics & Gynecology House Officer Greater Accra Regional Hospital · (Ridge, Accra. Ghana) · May 2011 - Nov 2011 https://garh.gov.gh/ Managed patients in antenatal clinics, labor and delivery ward, and emergency room; assisted specialists in the OR; presented cases during teaching rounds and meetings. Housemanship Guidelines: /view-pdf?file=Guidelines_For_Housemanship_In_Ghana_MDC-2015.pdf&folder=certificates ### Surgery House Officer 37 Military Hospital · (Neghelli Barracks, Accra. Ghana) · Oct 2010 - Apr 2011 https://www.ghana.gov.gh/mdas/ee0f1b1bcc/ Managed patients in surgical outpatient clinic, inpatient wards, and emergency room; assisted surgeons in the OR and performed minor surgical procedures; presented cases during clinical rounds and meetings. Housemanship Guidelines: /view-pdf?file=Guidelines_For_Housemanship_In_Ghana_MDC-2015.pdf&folder=certificates ### Pediatrics House Officer 37 Military Hospital · (Neghelli Barracks, Accra. Ghana) · Apr 2010 - Oct 2010 https://www.ghana.gov.gh/mdas/ee0f1b1bcc/ Performed bedside procedures; managed patients in pediatric outpatient clinic, NICU, inpatient wards, and emergency department; presented cases during clinical rounds and meetings. Housemanship Guidelines: /view-pdf?file=Guidelines_For_Housemanship_In_Ghana_MDC-2015.pdf&folder=certificates ### Visiting Scholar University of Michigan Medical School · (Ann Arbor, MI. USA) · Jan 2009 https://medicine.umich.edu/dept/globalreach/travel/visiting-students-umms Conducted patient assessments, participated in various clinical rounds, and completed a home visit for a CHF patient under resident supervision. ### Clinical Sub-Intern Keck School of Medicine of USC / LAC+USC Hospital · (Los Angeles, CA. USA) · Nov 2008 - Dec 2008 https://keck.usc.edu/ Conducted patient assessments and discussed management plans with assigned senior EM resident. Attended grand rounds and clinical sessions, functioning at sub-intern level during this elective. ### Webmaster Medical Women's International Association (MWIA) 2007 Conference · (Korle Bu, Accra. Ghana) · May 2005 - Sept 2007 https://mwia.net/ Designed and maintained website for the first MWIA Africa conference in Ghana; edited and published member blog content. ### Summer Research Intern Noguchi Memorial Institute For Medical Research (NMIMR) · (Legon, Accra. Ghana) · Aug 2005 https://www.noguchimedres.org/index.php/immunology Participated in a six-week research mentoring program in immunology, practicing laboratory techniques including Flow Cytometry, ELISA, Immunofluorescence microscopy, and PCR, while actively engaging in weekly scientific paper reviews. ### Hearing Aid QA Engineer Oticon Canada · (Brampton, Ontario. Canada) · Jun 2004 - Aug 2004 https://www.oticon.ca/hearing-aid-users Tested and packaged refurbished hearing aids for shipping. ### Webmaster, MASSIE Program Mount Allison University · (Sackville, NB. Canada) · Jun 2003 - Aug 2003 https://mta.ca/ Designed and updated webpages for the MASSIE website. ### Assistant Lab Supervisor, Chemistry Department Mount Allison University · (Sackville, NB. Canada) · Apr 2002 - May 2003 https://mta.ca/ Supervised first-year chemistry lab and assisted with grading midterm papers. ### Tutor, Meighen Centre Mount Allison University · (Sackville, NB. Canada) · Feb 2001 - Feb 2002 https://mta.ca/ Tutored biology to first-year university students with learning disabilities and helped them develop study strategies. ### Tutor, Chemistry Department Mount Allison University · (Sackville, NB. Canada) · Mar 2000 - Apr 2002 https://mta.ca/ Graded assessments for second-year organic chemistry and helped students organize materials for organic chemistry and biochemistry finals. ### Part-Time Manager, Athletic Department Mount Allison University · (Sackville, NB. Canada) · Mar 2000 - Jun 2002 https://mta.ca/ Sold day passes and maintained equipment while supervising weight room and gymnasium operations. ### Summer Research Intern, Chemistry Department Mount Allison University · (Sackville, NB. Canada) · May 2000 - Aug 2000 https://mta.ca/ Synthesized biotin analogues utilizing organic chemistry techniques under the supervision of Dr. Andrew Grant. ## Medical Education ### Internal Medicine Residency SGMC Health · Valdosta, GA. (July 2024 - present) https://www.sgmc.org/internal-medicine-residency/ ### Internal Medicine Residency Piedmont Athens Regional · Athens, GA. (July 2023 - July 2024) https://www.piedmont.org/locations/piedmont-athens/gme/im-residency-program ### Bachelor of Medicine and Bachelor of Surgery (MBChB) University of Ghana School of Medicine and Dentistry · Korle Bu, Accra. Ghana. (Sept 2003 - Mar 2010) https://ugms.ug.edu.gh/ ### BS in Biology / Biochemistry (Minor in Computer Science). First Class Honors. Mount Allison University · Sackville, NB. Canada. (Sept 1999 - May 2003) https://mta.ca/ ### International General Certificate of Secondary Education (IGCSE) & International Baccalaureate Diploma (IB), Distinction. SOS Hermann Gmeiner International School (SOS HGIC) · Tema, Ghana. (Aug 1997 - Jul 1999) https://www.soshgic.edu.gh/ ## Certifications & Licensure ### Leadership Skills Training Program for Chief Residents Accreditation Council for Graduate Medical Education (ACGME) · Issued Jun 2026 · certification https://www.acgme.org/ ### State Of Georgia License # 113025 State Of Georgia Composite Medical Board · Issued May 2026 · licensure https://gateway.medicalboard.georgia.gov/Verification/search.aspx ### Member Alpha Omega Alpha Honor Medical Society (AΩA) · Inducted 2026 (Member# 2165752) · membership https://www.alphaomegaalpha.org/ ### Society Of Hospital Medicine Member Society Of Hospital Medicine (SHM) · Issued Dec 2025 · membership https://www.hospitalmedicine.org/ ### ACP POCUS 2: Deep Vein Thrombosis American College of Physicians (ACP) · Issued Oct 2025 · certification https://www.acponline.org/ ### Advanced Cardiac Life Support (ACLS) Certificate Advanced Cardiac Life Support (ACLS) Certification · Issued Aug 2025 · certification https://www.redcross.org/take-a-class/als-and-pals/als-certification ### Basic Life Support (BLS) Certificate Basic Life Support (BLS) Certification · Issued Aug 2025 · certification https://www.redcross.org/take-a-class/bls ### Physician Builder Analytics EPIC · Issued Jul 2025 · certification https://www.epic.com/ ### Notecraft for Physician Builders EPIC · Issued May 2025 · certification https://www.epic.com/ ### ACP POCUS 6: Urinary System American College of Physicians (ACP) · Issued Jan 2024 · certification https://www.acponline.org/ ### ACP POCUS 5: Abdominal Free Fluid American College of Physicians (ACP) · Issued Jan 2024 · certification https://www.acponline.org/ ### ACP POCUS 3: Lung Ultrasound American College of Physicians (ACP) · Issued Dec 2023 · certification https://www.acponline.org/ ### ACP POCUS 4: Focused Cardiac Imaging American College of Physicians (ACP) · Issued Sept 2023 · certification https://www.acponline.org/ ### ACP POCUS 1: Obtaining Adequate Clinical Images for Interpretation American College of Physicians (ACP) · Issued Aug 2023 · certification https://www.acponline.org/ ### HarvardX - Statistics & R HarvardX (Harvard University) · Issued Jan 2023 · certification https://vpal.harvard.edu/harvard-online-harvardx ### Health Insurance Portability and Accountability Act (HIPAA) Awareness for Health Providers HIPAA Training - Certification course · Issued Apr 2022 · certification https://www.hipaatraining.com ### Member American Medical Association (AMA) · Mar 2022 - present (ME# 41201100061) · membership https://www.ama-assn.org ### Member American College of Physicians (ACP) · Mar 2022 - present (ACP# 04259096) · membership https://www.acponline.org/ ### Member American Heart Association (AHA) · Feb 2022 - present · membership https://www.heart.org ### ECFMG Certification Educational Commission for Foreign Medical Graduates (ECFMG) · Issued Oct 2021 (ID# 08258618) · licensure https://ecfmg.org/ ### Chest, Abdomen & OBGyn Ultrasound Training Precision Healthcare Ltd. · Sept 2012 · certification https://web.archive.org/web/20141218044202/http://www.precisionghana.com/ ### Permanent Registration Ghana Medical & Dental Council · Jun 2012 - present (MDC/RN/07145) · registration https://www.mdcghana.org/ ### Member Ghana Medical Association (GMA) · Apr 2012 - present · membership https://ghanamedassoc.org/ ### Open Water Diver Professional Association of Diving Instructors (PADI) · Jul 2010 - present (PADI # 10080V5462) · certification https://www.padi.com/courses/open-water-diver ## Honors & Awards ### Intern of the Year SGMC Health · SGMC GME · June 6, 2025 https://www.sgmc.org/sgmc-health-presents-annual-resident-awards/ Award Description: Selected by faculty for outstanding clinical skills, professionalism, and patient care. ### Antimicrobial Stewardship Team for Better Clinical Outcomes - 3rd Place Josh Nahum Award SGMC Health · Valdosta, Georgia · 2024 https://www.sgmc.org/sgmc-health-receives-statewide-awards-for-patient-safety/ Award Description: Received third place at the GHA Patient Safety Summit (Josh Nahum Award) for leading antimicrobial stewardship initiatives to optimize medication use, minimize risks, and prevent drug resistance. ### GlaxoSmithKline Award for Best Student in Clinical Medicine University of Ghana Medical School · (Korle Bu, Accra. Ghana) · Mar 2010 https://ugms.ug.edu.gh/ Award description: A merit-based award presented to the student who received the highest grade on the MBChB Final Part II Examination in Medicine and Therapeutics. ### Certificate of Appreciation - Rotary Youth Leadership (RYL) Awards Rotary Club Of Accra · (Accra, Ghana) · Jun 2007 https://rotaryclubofaccra.org/ Award description: Certificate awarded for providing outstanding first aid services during the RYL Awards program and aiding in planning and delivering medical care to underprivileged residents of Adamarobe in Ghana's Eastern Region. ### Joseph Samuel and Cora Vallis Bursary Mount Allison University · (Sackville, NB. Canada) · Sept 2003 https://mta.ca/ Award description: A merit-based financial award. ### Dean's List Award Mount Allison University · (Sackville, NB. Canada) · Sept 2000 - Sept 2003 https://mta.ca/ Award description: Honor for consistently excellent undergraduate academic performance. ### Mount Allison University Entrance Scholarship Mount Allison University · (Sackville, NB. Canada) · Aug 1999 https://mta.ca/ Award description: Award given for high academic achievement and extracurricular involvement. ## Publications ### ConsultChain: Progressive Context Distillation Across Heterogeneous LLM Fleets for Token-Optimal Inference Preprint https://www.researchsquare.com/article/rs-9368244/v1 Edusa, S. Preprint posted online April 13, 2026. doi:10.21203/rs.3.rs-9368244/v1 ### Gastric Xanthoma in a Long-Standing Billroth II Gastric Remnant: A Diagnostic Pitfall With Implications for Surveillance Case Report Edusa S, Heron M, Mandal AK. Case report manuscript in preparation; Department of Internal Medicine, SGMC Health, Valdosta, GA. ### Vitamin B12 as a Prognostic Biomarker in Liver Cirrhosis: A Systematic Review of the Paradox of Elevation Abstract Heron M, Edusa S, Munoz G, Baah-Sackey R. Research abstract submitted to the American College of Physicians (ACP) Georgia Chapter Resident/Fellow Abstract Competition 2026; SGMC Health, Valdosta, GA. ### Non-compaction Masquerading as Methamphetamine Cardiomyopathy Abstract Ravuri S, Edusa S. Clinical case abstract submitted to the American College of Physicians (ACP) Georgia Chapter Resident/Fellow Abstract Competition 2026; SGMC Health, Valdosta, GA. ### Uncovering the Great Mimic: A Collaborative Approach for the Brain's Silent Invader Abstract Morciego J, Edusa S, Joseph P, Allahuddin Z, Brown M. Clinical case abstract submitted to the American College of Physicians (ACP) Georgia Chapter Resident/Fellow Abstract Competition 2026; SGMC Health, Valdosta, GA. ### Neuromyelitis Optica Spectrum Disorder Presenting as Progressive Bulbar Dysfunction and Acute Respiratory Failure Mimicking Wernicke Encephalopathy Abstract Fashugba M, Edusa S, Afolayan A, Brian I, Gandi V, Mansoor M, Sobukonla T. Clinical case abstract submitted to the American College of Physicians (ACP) Georgia Chapter Resident/Fellow Abstract Competition 2026; SGMC Health, Valdosta, GA. ### A Sip Too Cold: Vagally Mediated Atrial Fibrillation Triggered by Ice-Water Ingestion in a Healthy Young Man Abstract Salih R, Edusa S, Joseph P, Hassib M. Clinical case abstract submitted to the American Heart Association (AHA) Scientific Sessions 2026; SGMC Health, Valdosta, GA. ### Recurrent Hyponatremia Unmasking Adrenal Insufficiency: Diagnostic Pitfalls in Distinguishing SIADH from Hypocortisolism Abstract https://www.sciencedirect.com/science/article/pii/S0272638626003458 Joseph P, Salih R, Edusa S, Zaw T. Abstract presented at: National Kidney Foundation 2026 Spring Clinical Meetings; April 2026. Am J Kidney Dis. 2026;87(5)(suppl 2):S103. ### Salmonella on the Lead: A Rare Case of Device-Related Endocarditis Abstract https://www.jacc.org/doi/full/10.1016/j.jacc.2026.02.3651 Joseph P, Salih R, Tom M, Brian I, Owens J, Sharma S, Edusa S, Sobukonia T. J Am Coll Cardiol. 2026;87(13_Supplement). Poster Contributions. Published March 27, 2026. ### Nudging Toward High-Value Care: Reducing Low-Value Inpatient Laboratory Testing Through Cost Awareness and Behavioral Design QI Project Edusa S, Heron M, Yakubu E, Barbone I, Joseph P, Baah-Sackey R & Lamptey L. Inpatient QI Project, ongoing. ### Standardizing Enteral Nutrition Order Entry: Development of an Epic SmartPhrase Template to Reduce Tube Feeding Documentation Errors QI Project Edusa S. Inpatient QI Project, January 2026. ### Acute Interstitial Pancreatitis as a Rare Complication of Salmonella enterica Gastroenteritis: A Case Report Case Report Joseph P, Edusa S, Salih R. Manuscript in preparation. ### The Cessation Paradox: Recognizing Delayed Alcoholic Hepatitis in Clinical Practice Case Report https://www.researchsquare.com/article/rs-8800971/v1 Edusa, S., Fashugba, M.A. & Mitra, A. Preprint posted online February 9, 2026. doi:10.21203/rs.3.rs-8800971/v1 ### Scratching the Surface: A Case of Norwegian Scabies In A Neglected Patient Poster /view-pdf?file=poster-norwegian-scabies.pdf&folder=research Edusa S, Brown M, Boyd B. Poster Presentation, SGMC Health/Mercer University School of Medicine, 2025. ### Enhancing Ventilator Weaning Documentation: Implementation of Standardized Smart Phrases for SBTs and Sedation Holidays Abstract Edusa S & Ledford A ICU QI Project, April 2025 ### Does Statin Use in Frail Patients Provide Survival Benefits? Insights From a Meta-Analysis Abstract https://pubmed.ncbi.nlm.nih.gov/37597795/ Mondal, A., Li, A., Edusa, S., Gogineni, A., Karipineni, S., Abdelhafez, S., Nalluri, S.D., Meka, G.G., Bawa, J., Puli, S., Venkata, V.S., Vyas, A., Jain, A. & Desai, R. Current Problems in Cardiology, Volume 49, Issue 1, Part A, January 2024, 102038. ### Safety of implantable cardioverter-defibrillators in patients with sarcoidosis: A nationwide database analysis Case Report https://pmc.ncbi.nlm.nih.gov/articles/PMC10994648/ Singireddy, S. & Edusa, S. Cureus. 2024;16(3):e55589 ### RDW As a Predictor of Adverse Outcomes: A Systematic Review and Meta-Analysis of Frailty and Mortality Risk Abstract https://doi.org/10.1182/blood-2023-187866 Keesari, P.R., Vegivinti, C.T.R., Ganampet, N.R., Guna, S.D.S., Venugopalan, S., Edusa, S., Manaktala, P.S., Palisetti, S., Muslehuddin, Z., Theik, N.W., Salibindla, D. & Desai, R. Blood (2023) 142 (Supplement 1): 5216 ### Prevalence And Odds Of Stroke In Young Cancer Patients With Vs. Without Cannabis Use Disorder (CUD): A Contemporary Nationwide Analysis In The United States, 2019 Abstract /view-pdf?file=16-WSC23-Abstract-Stroke-Cancer-CUD-Samuel-Edusa.pdf&folder=research Jain, A., Bansal, P., Edusa, S., Varma, H., Patta, H.V.C., Mohammed, A., Sagoo, G., Ishita, V., Lakkimsetti, M., Vyas, A., Rupareliya, C., Manaktala, R. & Desai, R. [Abstract submitted]. World Stroke Organization (WSC 2023)/Toronto, ON, Canada. (2023, Oct 10-12). ### The Impact Of COVID-19 On Mortality, Length Of Stay, And Cost Of Care Among Patients With Gastrointestinal Malignancies: A Propensity Score-Matched Analysis Abstract https://pubmed.ncbi.nlm.nih.gov/37519127/ Ulanja, M.B., Beutler, B.D., Governor, S.B., Asafo-Agyei, K.O., Amankwah, M., Antwi-Amoabeng, D., Edusa, S., Rahman, G.A., Djankpa, F.T., Ulanja, R.N. & Alese, O.B. Cancer Med. 2023; 00: 1- 12. doi:10.1002/cam4.6355. ### In-Hospital Outcomes Of Opioid-dependent Inflammatory Bowel Disease In Cannabis Versus Non-Cannabis Users: A Nationwide Propensity Matched Analysis In The United States Abstract https://journals.lww.com/ajg/fulltext/2023/10001/s931_in_hospital_outcomes_of_opioid_dependent.1470.aspx Katamreddy, R.R., Edusa, S., Katamreddy, Y., Ravilla, J., Alvi, A.T., Sibia, B., Birimroz, S., Veliginti, S., Agarwal, C., Asfeen, U. & Desai, R. The American Journal of Gastroenterology 118(105):p 5697-5698, October 2023. ### Do Outcomes Differ Between NAFLD Cohorts From The Lowermost Income Quartile Versus The Highest Income Quartile? A Nationwide Propensity Score matched Analysis Abstract https://www.gastrojournal.org/article/S0016-5085(23)04016-7/pdf Alvi, A.T., Katamreddy, R.R., Katamreddy, Y., Sibia, B., Birimroz, S., Ravilla, J., Agarwal, C., Veliginti, S., Asfeen, U., Edusa, S., & Desai, R. Gastroenterology Volume 164, Issue 6, Supplement, S-1298, May 2023. ### Can Cerebral Embolic Protection Devices (CEPD) Reduce Postoperative Stroke In Patients Undergoing Transcatheter Aortic Valve Replacement (TAVR) With A Prior History Of Stroke/Transient Ischemic Attack (TIA)? Abstract https://www.jacc.org/doi/10.1016/S0735-1097%2823%2901266-4 Mondal, A., Kanagala, S.A., Pingili, A., Edusa, S., Karipineni, S., Mehdi, S., Hazra, S., Danish, A., Borra, V., Khatoon, G., Chauhan, S., Jain, A. & Desai, R. J Am Coll Cardiol. 2023 Mar, 81 (8_Supplement) 822 ### Increased Body Mass Index/Obesity Is Associated With Higher Mortality And Major Adverse Cardiac Events In Patients With Hypertrophic Obstructive Cardiomyopathy (HOCM) On A Longterm Follow-up – A Systematic Review And Meta-Analysis Abstract https://www.ahajournals.org/doi/10.1161/circ.146.suppl_1.11762 Edusa, S., Sharma, A., Naseem, R., Patel, Y.R., Singh, G.K., Anmol, S.I., Reddy, S., Reyaz, N., Desai, A., Devi, S.D., Stanikza, S., Prem, A. D. & Desai, R. [Poster presentation]. American Heart Association Scientific Sessions/Chicago, IL, USA. (2022, November 06). ### Nationwide Trends In Subsequent Myocardial Infarction Hospitalizations And Mortality In Elderly Patients With Prior Myocardial Infarction And Associated Racial/Socioeconomic Disparities: A National Inpatient Sample Analysis Abstract https://www.ahajournals.org/doi/10.1161/circ.146.suppl_1.12218 Jain, A., Edusa, S., Sharma, A., Naseem, R., Singh, G.K., Anmol, S.I., Desai, A., Patel, Y., Reddy, S., Reyaz, N., Stanikzai, S. & Desai, R. [Poster presentation]. American Heart Association Scientific Sessions/Chicago, IL, USA. (2022, November 07). ### Seasonal Variation In In-hospital Outcomes Of Takotsubo Syndrome-Related Admissions: A National Inpatient Analysis, 2019 Abstract https://doi.org/10.1016/j.ijcrp.2022.200164 Desai, R., Edusa, S., Reyaz, N., Venkata, V.S., Puli, S. & Jain, A. International Journal of Cardiology Cardiovascular Risk and Prevention. (2022, Dec 14). ### In-Hospital Mortality Following Mechanical Thrombectomy In Asian/Pacific Islander Patients Hospitalized For Acute Ischemic Stroke - An Artificial Neural Network Analysis In A Nationwide Cohort Abstract https://doi.org/10.1177/17474930221125973 Desai, R., Edusa, S., Mann, H., Mateti, N., Ashfaque, M., Sanikommu, S., Mondal, A. & Rupareliya, C. [Oral Presentation]. World Stroke Congress (WSC)/Singapore, SGP. (2022, October 27). ### Cardio-Cerebral Infarctions In Covid-19: A Systematic Review Of Published Case Reports Abstract https://doi.org/10.1177/17474930221125973 Mondal, A., Mann, H., Ashfaque, M., Sanikommu, S., Edusa, S., Rupareliya, C. & Desai, R. [Oral Presentation]. World Stroke Congress (WSC)/Singapore, SGP. (2022, October 26). ### Nationwide Burden, Impact And Predictors Of Type 2 Myocardial Infarctions In Acute Pulmonary Embolism-Related Hospitalizations Abstract https://journal.chestnet.org/article/S0012-3692(22)03342-6/fulltext Desai, R., Edusa, S., Verma, J., Desai, R.M., Patel, H., Rahman, A., Nunez, F.G., Sripathi, K., Prasad, A., Najam, N., Aquino, C.V. & Jain, A. CHEST Volume 162, Issue 4, Supplement, A2414-A2415, October 2022 ### Burden, Predictors And Outcomes Of Respiratory Intubation In Hospitalizations For Sepsis With Concomitant Heart Failure with Preserved Ejection Fraction Abstract https://journal.chestnet.org/article/S0012-3692(22)02147-X/fulltext Gandhi, Z.J., Edusa, S., Mann, H., Desai, R.M., Thota, A.K., Sadum, N., Patel, H., Shahnawaz, W., Ghadge, N., Jain, A. & Desai, R. CHEST Volume 162, Issue 4, Supplement, A997-A998, October 2022. ### Burden And Predictors Of Sepsis-Associated Cardiac Arrest: A National Inpatient Sample Analysis, 2018 Abstract https://www.ahajournals.org/doi/10.1161/circoutcomes.15.suppl_1.229 Desai, R., Patel, V., Vasavada, A., Haque, F.A., Jain, M., Shawl, S., Desai, R., Sadum, N., Sanikommu, S., Edusa, S., Alukal, T. & Jain, A. [Poster presentation]. Quality of Care and Outcomes Research (QCOR) Scientific Sessions/Reston, VA, USA. (2022, May 13). ### Prediabetes In Young Adults And Its Association With Type 1 Myocardial Infarction-Related Admissions And Outcomes: A Population-based Analysis In The United States Abstract https://www.ahajournals.org/doi/10.1161/circoutcomes.15.suppl_1.230 Desai, R., Haque, F.A., Vasavada, A., Jain, M., Desai, R.M., Patel, V., Shawl, S., Sanikommu, S., Edusa, S., Sadum, N., Alukal, A. & Jain, A. [Oral Presentation]. Quality of Care and Outcomes Research (QCOR) Scientific Sessions/Reston, VA, USA. (2022, May 14). ### Foreign Body In Scrotum Following An Industrial Blast Accident: A Case Report Case Report https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3645186/ Mante, S.D., Yeboah, E.D., Adusei, B. & Edusa, S. [Peer Reviewed Journal Article]. Ghana Medical Journal, 47(1), 50-2. (2013, March). ### The Ampain Refugee Camp - A Health Perspective Report /view-pdf?file=The-Ampain-Refugee-Camp-Health-Perspective-2011-Dr-Samuel-Edusa.pdf&folder=research Edusa, S. & Zakaraiah L. [Non-Peer Reviewed Online Publication]. A report on the health situation at the Ampain Refugee Camp, presented to the Western Regional Director of the Ghana Health Service. (2011, April 13). ### The Need For Post-Mastectomy Breast Reconstruction Among Ghanaian Women Who Have Undergone Mastectomy At The Korle Bu Teaching Hospital Dissertation /view-pdf?file=Post-mastectomy-breast-reconstruction-dissertation-2019-Dr-Samuel-Edusa.pdf&folder=research Edusa, S. [Non-Peer Reviewed Online Publication]. Dissertation presented to the Community Health Department, University of Ghana Medical school. (2009, October 21). ## Presentations & Talks ### A Diagnosis Hiding in Plain Sight Morbidity & Mortality Conference · Valdosta, GA · 2026-06-19 https://pdfpresent.netlify.app/interactive-presentations/mm-conference-june-2026/ Co-presented a Morbidity & Mortality case on a 65-year-old man with metastatic lung cancer in whom free intraperitoneal air from a perforated duodenal ulcer went unrecognized on serial chest radiographs for two to three days. Discussed how anchoring bias masked a surgical emergency and the importance of systematic film review of the lung bases and diaphragm. ### The Clinical Management of Inhalation Injury Noon conference | ICU Journal Club presentation · Valdosta, GA · 2026-02-25 /view-pdf?file=inhalational-injury-2-25-26-edusa.pdf Presented an ICU journal club on the clinical management of inhalation injury, covering pathophysiology, diagnostics, and targeted therapies. Discussed how inhalation injury complicates 10-20% of burn cases, serves as an independent predictor of mortality, and triggers cascades of higher fluid needs, prolonged ventilation, and ARDS. ### Ambient AI Scribes: A Critical Review of two randomized controlled trials Noon conference | Journal Club presentation · Valdosta, GA · 2026-01-26 /view-pdf?file=ambient-ai-scribes-edusa-01-26-26.pdf Presented two randomized controlled trials on ambient AI scribes for a journal club, examining their impact on physician burnout and documentation efficiency across multiple platforms. ### The Tremor Trail: Following Clinical Clues to West Nile Encephalitis Georgia ACP Conference · Atlanta, GA · 2025-10-24 /view-pdf?file=gaacp-wnv-samuel-edusa-md.pdf Presented a case report on a patient with West Nile Encephalitis as a podium presentation at the Georgia ACP Conference in Atlanta, GA, highlighting the clinical features, diagnosis, and management of the disease. ### CONFIDENCE Trial: Combination Therapy for Diabetic Kidney Disease Noon conference | CRQ presentation · SGMC Health · 2025-09-22 /view-pdf?file=crq-samuel-edusa-md-9-22-25.pdf Presented findings from the CONFIDENCE trial on combining SGLT2 inhibitors with non-steroidal MRAs for diabetic kidney protection as part of a CRQ case during noon conference. ### Artificial Intelligence in Healthcare: Current Progress and Future Promise South Georgia Regional GME Conference · VSU Health Sciences Building, Valdosta, GA · 2025-09-13 /view-pdf?file=artificial-intelligence-in-healthcare-samuel-edusa-md.pdf Presented an overview of AI's transformative impact on healthcare, covering diagnostic breakthroughs, operational improvements, and clinical decision support systems. Discussed real-world implementations at major health systems and addressed key challenges around bias, privacy, and adoption barriers facing the next generation of healthcare professionals. ### Stay Calm: The Admit or Transfer Dilemma Noon conference · SGMC Health · 2025-07-01 /view-pdf?file=noon-report-admit-transfer-edusa-07-01-25..pdf This ambulatory report covered comprehensive guidance for internal medicine residents on managing ambulatory patients requiring hospitalization. The presentation addressed the key differences between direct hospital admission and emergency department transfer, provided evidence-based decision criteria, and introduced a validated ambulatory triage calculator. Featured real clinical cases, SBAR communication framework, step-by-step processes for both pathways, and practical information on clinic emergency supplies. Essential training for residents learning to make critical triage decisions in outpatient settings. ### Hidradanitis suppurativa Noon conference · SGMC Health · 2025-06-04 /view-pdf?file=hs-6-4-25-samuel-edusa-md.pdf This presentation covered Hidradenitis Suppurativa (HS), a chronic inflammatory skin disease, through a case study of a 26-year-old male with recurrent painful lesions. The talk explored diagnostic criteria, staging systems, and evidence-based treatments from topical therapies to biologics like adalimumab, emphasizing the importance of a multidisciplinary approach for optimal patient outcomes. ### Ghana Culturosity Presentation · SGMC Health · 2025-02-14 /view-pdf?file=ghana-culturosity-02-14-25.pdf Presented a cultural exploration of Ghana, covering its rich history, traditions, and contemporary significance. The talk highlighted key aspects of Ghanaian culture, including language, customs, and contributions to global society. ### Hypernatremia Morning report · SGMC Health · 2024-12-24 Presented a clinical case of hypernatremia during morning report, highlighting diagnostic approach and management strategies. ### Chronic cough Noon conference · SGMC Health · 2024-12-09 /view-pdf?file=chronic-cough-12-9-24-edusa.pdf Presented an ambulatory report on chronic cough, focusing on diagnostic evaluation and management strategies. ### Intestinal Obstruction Noon conference · SGMC Health · 2024-11-20 /view-pdf?file=noon-conference-11-20-24-edusa.pdf Presented an interesting case of intestinal obstruction during noon conference, discussing diagnostic approach, management strategies, and the role of imaging in the diagnosis. ### SIADH Noon conference · SGMC Health · 2024-11-18 Presented an overview of SIADH at noon conference, highlighting its causes, clinical features, diagnosis, and key management principles. ### Finerenone in Heart Failure with Mildly Reduced or Preserved Ejection Fraction Noon conference · SGMC Health · 2024-11-01 /view-pdf?file=jc-finerenone-11-01-24.pdf Co-presented journal club on finerenone in heart failure with mildly reduced or preserved ejection fraction, focusing on its mechanism of action, clinical benefits, and potential side effects. ### Skin Cancer: What Farmers Should Know Sunbelt Ag Expo · Moultrie, GA · 2024-10-16 /view-pdf?file=skin-cancer-moultrie-10-16-24.pdf This presentation at the Sunbelt Ag Expo (Moultrie, GA) educated farmers about skin cancer prevention and detection. It covered the three main types of skin cancer, emphasized that 90% is caused by UV radiation, and highlighted farmers' increased risk. Key recommendations included daily sunscreen (SPF 15+), protective clothing, monthly self-exams using ABCDE criteria, and annual professional skin checks. ### Febrile Neutropenia in Adults With Hematologic Malignancies Noon conference · SGMC Health · 2024-08-19 /view-pdf?file=febrile-neutropenia-8-9-24-samuel-edusa-md.pdf This noon conference covered febrile neutropenia in hematologic malignancies. It defined neutropenia (ANC <1500), emphasized this is a medical emergency requiring antibiotics within 60 minutes, and reviewed MASCC risk stratification. Key management included comprehensive assessment with cultures, empirical antipseudomonal beta-lactam therapy, selective vancomycin use, and continuing treatment until neutrophil recovery. ### Upper GI Bleeding Morning report · SGMC Health · 2024-07-16 /view-pdf?file=morning-report-drs-tom-edusa.pdf This morning report presented a 69-year-old female with severe anemia (Hgb 5.6) from upper GI bleeding, managed with transfusion, PPI infusion, and GI consultation. The presentation reviewed upper GI bleeding definitions, etiologies, and management, emphasizing scoring systems including Rockall, Blatchford, AIM65, and ABC scores for risk stratification and disposition decisions. ## Volunteering & Leadership ### Editor/Software Developer Azalea Report · (Valdosta, GA) · Sept 2024 - present https://azaleareport.com/ Developed and currently maintain the SGMC Health Internal Medicine Resident e-newsletter. More information: https://www.samueledusa.com/post/azalea-report ### Open Source Contributor Pancreas Digital · (Remote) · Sept 2022 - Present https://www.youtube.com/PancreasDigital Code and documentation contributor to the Pancreas Digital Open Source Insulin Bolus Calculator on GitHub. View sample code contribution: https://github.com/Pancreas-Digital/bolus-calculator/pull/7 ### Alumni Website Board Member University of Ghana Medical School Alumni Association · (Remote) · Mar 2022 - present https://www.ugmsaa.org Edited and uploaded videos of public talks and events to the alumni website, commemorating the medical school's 60th anniversary. Collaborated with Dr. Stephen Akafo (UGMS, Class of 1981). ### Health Screening Volunteer Okaikwei Central Municipal Assembly & Samalla Clinic Ltd. · (Accra. Ghana) · Feb 2013 - present https://www.samallaclinicltd.com Conducted health screenings in Okaikwei Central Constituency of Accra, measuring BMI, blood pressure, and glucose levels. Prescribed medications for malaria, bacterial skin conditions, and gastroenteritis, and referred clients needing urgent care to appropriate facilities. ### Exhibitor & Presenter SGMC Health · (Valdosta, GA) · Oct 16 2024/2025 https://www.sgmc.org Presented skin cancer information at the expo in partnership with PCOM Georgia, administered questionnaires, and performed blood pressure measurements. Provided counseling on preventive screening advice and lifestyle education. About the Sunbelt Ag Expo: https://sunbeltexpo.com/ ### Volunteer Resident Physician SGMC Health · (Valdosta, GA) · Sept 2024 https://www.sgmc.org Provided medical and emotional support to shelter occupants during Hurricane Helene and collaborated with Red Cross staff to manage shelter operations and ensure resident safety. Read account of my experience: https://www.samueledusa.com/post/hurricane-helene ### Food Delivery Volunteer Passion City Church / Meals On Wheels · (Atlanta, GA. USA) · Jun 2020 https://loveatlanta.com/ Delivered meals and friendly greetings to homebound seniors in the Atlanta area. ### Hackathon Participant Health Innovation Challenge - Atlanta VA Medical Center · (Atlanta, GA. USA) · Apr 2015 https://medium.com/vainnovation/health-innovation-challenge-the-atlanta-va-medical-center-913755261ec4 Designed and built TotemID, a HIPAA-compliant patient identification app that generates unique identifiers (UUIDs) for laboratory and imaging investigations, allowing doctors to access results by texting the identifier to a database via SMS shortcode. Created and delivered a 10-minute pitch presentation to a panel of judges. ### Medical Volunteer Ampain Refugee Camp · (Ampain, Western - Region, Ghana) · Apr 2011 https://www.grb.gov.gh/Ampain%20Camp.html Conducted a public health assessment of the refugee camp and presented a written report to the Western Regional Director of Ghana Health Service. Organized malaria prevention health talks and provided medical and minor surgical care to Ivorian refugees during post-election civil unrest. ### Medical Outreach Organizer & Volunteer Aim for Christ Medical Outreach Group · (Accra, Ghana) · Feb 2011 https://www.samallaclinicltd.com Organized and participated in medical outreaches to deprived villages in Ghana's Central, Eastern, and Volta Regions. Outreach pictures: /p/aim-medical-outreach ### Medical Volunteer Reconstructive Plastic Surgery and Burns Centre - Amasaman Buruli Ulcer Surgical Outreach · (Amasaman, Accra. Ghana) · Jun 2010 https://gawestmunicipalhospital.org/ Assessed patients to identify Buruli Ulcer cases. Assisted surgeons with excisions, skin graft harvesting, and suturing. ### Co-founder & President LifeSavers Initiative · (Korle Bu, Accra. Ghana) · Nov 2005 - Mar 2010 Co-founded the LifeSavers Initiative non-profit organization to raise funds for children requiring surgery and organized medical outreaches. View project pictures: /p/lifesavers-initiative ### Founder & Contributor Medical School Digital Study Aid Initiative · (Accra, Ghana) · Feb 2004 - Mar 2010 https://ugms.ug.edu.gh/ Digitized and uploaded study materials including pathology specimens, surgical instruments, lecture notes, and past exam questions to enhance online resources for medical student and resident exam preparation. ### Editor STIMULUS Medical Student Research Journal · (Korle Bu, Accra. Ghana) · Jan 2007 - Jan 2008 https://ugmsa.org/ Wrote editorials for a student-run medical journal publishing research and student articles, while also organizing medical outreach events and creating promotional materials to generate operational funding. ### Medical Volunteer WHO World Health Day Free Medical Screening Exercise · (Labadi Beach, Accra. Ghana) · Sept 2007 https://www.who.int/campaigns/world-health-day/ Measured blood pressure and BMI; educated clients on cardiovascular disease prevention. ### Medical Volunteer University of Ghana Medical Students Association Health Week Outreach · (Daboase, Western Region - Ghana) · Aug 2007 https://ugmsa.org/ Educated residents of Daboase and surrounding villages in Western Region's Wassa East District about how physical exercise, proper diet, and nutrition help prevent hypertension and diabetes. ### Breast Clinic Volunteer National Radiotherapy Oncology and Nuclear Medicine Centre · (Korle Bu, Accra. Ghana) · Jun 2007 - Jul 2007 https://nronmedcentre.com/ Documented comprehensive patient histories during breast clinic at KBTH's Nuclear Medicine Department, conducted physical examinations, provided instruction on breast self-examination techniques, and collaborated with specialists to analyze and discuss clinical findings ### Medical Volunteer Danny Whyte & Ivor Burford Bone Marrow Drive · (Kumasi, Ghana) · Jul 2006 https://www.dwibuk.org/ Conducted radio interview to raise public awareness about leukemia and supported blood sample collection during blood drives. ### Volunteer Sackville Drew Nursing Home · (Sackville, NB. Canada) · Jun 2003 - Aug 2003 https://drewnursinghome.ca/drew-nursing-home/ Helped seniors with daily walks, reading, and grocery shopping. ### Volunteer Sackville Special Populations Program · (Sackville, NB. Canada) · Jun 2001 - Aug 2002 https://sackville.com/ Taught children with mental and physical disabilities to swim. ### Volunteer & Fundraiser Sackville Hospital Shinerama Program · (Sackville, NB. Canada) · Feb 2001 - Feb 2002 https://www.shinerama.ca/ Created and distributed flyers in the Sackville community to raise awareness about cystic fibrosis. ## Skills ### Clinical Acute inpatient management, critical & step-down care, transitions of care, and quality improvement. ### Procedures Central and arterial lines, paracentesis, thoracentesis, lumbar puncture, and intubation, plus point-of-care ultrasound (POCUS, incl. DVT) and chest, abdomen & OB/GYN ultrasound. ### Resuscitation ACLS and BLS, plus rapid response and code-team participation. ### Teaching Resident and medical-student instruction, simulation-based training, journal clubs, and curriculum support as Chief Resident. ### EMR & informatics Epic (Physician Builder, Analytics, order sets, SmartPhrases, templates), plus full-stack software and healthcare-AI development. ## Languages ### English Native/functionally native. ### Russian Good ### French Basic ## Hobbies & Interests ### Software development I enjoy writing code and have developed several websites, web and mobile applications. Much of my work these days centers on AI-driven and agentic engineering. ### Running After my first half-marathon in medical school, I fell in love with running. I have completed several half-marathons and a sprint triathlon, with a long-term goal to complete a half-Ironman. ### Scuba diving I enjoy the tranquility of open sea diving and have completed over 7 open water dives since obtaining my PADI certification in Cozumel, Mexico. ## Software Overview Innovative Software Engineer Bridging AI and Healthcare Technology Senior Software Engineer with 8+ years of experience whose career has evolved from front-end engineering to full-stack development and now into agentic AI engineering. Passionate about leveraging artificial intelligence in healthcare technology to enhance physician efficiency and patient outcomes. Combines deep technical expertise across the entire stack with strong communication skills to transform complex requirements into elegant, AI-driven solutions. Skilled team collaborator who delivers exceptional results both independently and collectively. Detail-oriented collaborator who thrives both in team environments and when working autonomously. Skilled communicator with a proven ability to foster meaningful relationships across all organizational levels—from executive leadership to technical teams and clients. Committed to delivering thoughtfully customized solutions that address specific needs rather than one-size-fits-all approaches, ensuring each project receives tailored attention and achieves optimal outcomes. ## Software Experience ### Senior Software Engineer Cognizant Softvision · (Atlanta, GA) / Remote · Jan 2021 - July 2023 https://www.cognizant.com/us/en Developed enterprise retail edge software that virtualized store applications through intelligent automation and cloud management, and contributed to the dashboard application redesign for store and workload deployment. Built custom components, implemented unit and end-to-end testing, resolved regression issues, participated in code reviews, and presented during sprint demonstrations. Client/Project: NCR Corporation - Retail Edge React, Typescript, NodeJS, Apollo GraphQL, Google Cloud Platform, Docker, Jest & Enzyme, & Cypress. ### Software Engineer Cognizant Softvision · (Atlanta, GA) / Remote · October 2020 - Jan 2021 https://www.cognizant.com/us/en Developed customer-facing components for an enterprise platform embedded in client websites to enable online ordering functionality. Implemented major features including order history page redesign, created unit tests, resolved regression issues, contributed to code reviews, and delivered sprint demonstrations. Client/Project: NCR Corporation – Aloha Digital Ordering React, Typescript, NodeJS, Apollo GraphQL, Google Cloud Platform, Docker, Jest & Enzyme, & Cypress. ### Software Engineer Tin Roof Software · (Atlanta, GA) / Remote · August 2018 – October 2020 https://www.cognizant.com/us/en Developed and maintained an API, CMS, and web application as a full-stack developer, taking ownership of pixel-perfect responsive UI templates using modern styling techniques and build patterns. Collaborated in a small agile team to deploy products from concept to production, and implemented minor iOS app features using Swift during select sprint cycles. Client: Great Big Story (a Turner Broadcasting subsidiary) React, NextJS, NodeJS, PostgreSQL, Apollo GraphQL, AWS Elastic Beanstalk, CircleCI, Fastly, Redis. ### Software Engineer Tin Roof Software · (Atlanta, GA) / Remote · March 2018 – August 2018 https://www.cognizant.com/us/en Developed a cross-platform hospital meal ordering application, designing and implementing UI components including forms, toasts, and confirmation dialogs. Built models, providers, and controllers while integrating with the CBORD food & nutrition backend. Project: CBORD Patient Ionic Framework, Angular 4, NodeJS, TypeScript, HTML5/CSS3, cordova. ### Web Developer Cute Bear Designs, LLC. · Remote · August 2016 – present Developed several cross-platform applications for a globally recognized skincare company and successfully deployed them to both the Apple App Store and Google Play Store. Ionic Framework, Angular 4, NodeJS, TypeScript, HTML5/CSS3, cordova. ## Software Education ### Front End Development Immersive Program Tech Talent South · Atlanta, GA http://www.techtalentsouth.com/ ### Bachelor of Medicine and Bachelor of Surgery (MBChB) University of Ghana Medical School · Accra, Ghana https://ugms.ug.edu.gh/ ### Bachelor of Science (BSc), Medical Sciences University of Ghana Medical School · Accra, Ghana https://ugms.ug.edu.gh/ ### BS in Biology / Biochemistry (Minor in Computer Science). Graduated with First Class Honors. Mount Allison University · New Brunswick, Canada https://mta.ca/ ## Projects ### Azalea Report January 2024 - present · Next.js, TypeScript, Tailwind CSS, Convex & Vercel · featured · Active /project/azalea-report SGMC Health Internal Medicine Residency newsletter **Status:** Active **Timeline:** January 2024 - present **Visit site:** [azaleareport.com](https://azaleareport.com) **Technologies:** Next.js, TypeScript, Tailwind CSS, Convex & Vercel --- The Azalea Report is the official newsletter of the SGMC Health Internal Medicine Residency program. I built it as a web app so residency news, academic updates, and community highlights all live in one place instead of getting buried in email threads. The goal was straightforward: give the program a professional way to share accomplishments, upcoming events, and educational content with residents, faculty, and staff, and make it easy to keep current. ## Architecture It's a TypeScript monorepo run with Turborepo. Inside are two Next.js 14 apps and a handful of shared packages: the public newsletter site (`@azalea/web`), a content-management dashboard (`@azalea/admin`), a shared UI library (`@azalea/ui`), shared types and utilities (`@azalea/shared`), and a set of reusable content blocks (`@azalea/sections`). The backend runs on Convex, a serverless platform with a real-time cloud database. It holds issues, sections, media, users, birthdays, and editing locks so two editors don't clobber each other's work. The frontend deploys to Vercel with continuous deployment, the backend lives on Convex Cloud, and a few custom scripts handle production deploys and storage migrations. ## The admin dashboard Most of the work went into the CMS. Editors create, edit, publish, and archive issues, and build each one from 18+ section types like spotlight, chief's corner, events, carousel, podcast, and birthdays. Rich text editing uses Tiptap, sections reorder with drag-and-drop via dnd-kit, and images come in through a media library built on react-dropzone. There's sign-in, concurrent-editing locks, a stats overview for issues and drafts, and a light or dark toggle. ## Styling and integrations Styling is Tailwind CSS 3.4 with the typography and forms plugins, a custom Azalea palette (green `#016f53`, peach `#FFE6D6`), and Montserrat paired with Georgia. Convex drives all the real-time queries and mutations. An OG image proxy route keeps links previewing correctly in WhatsApp and other apps, and anything user-facing is run through sanitize-html and DOMPurify to keep XSS out. ### SGMC Resident Guide 2024 - present · React, TypeScript, Netlify · featured · Active /project/sgmc-resident-guide Searchable clinical resource hub for internal medicine residents **Status:** Active **Timeline:** 2024 - present **Visit site:** [sgmc-resident-guide.netlify.app](https://sgmc-resident-guide.netlify.app) **Technologies:** React, TypeScript, Netlify --- The Resident Guide is a single place for SGMC Health internal medicine residents and interns to find what they need on shift: clinical references, ward notes, specialty guidelines, and on-call resources, all searchable. During residency the useful stuff tends to scatter across emails, paper handoffs, and shared drives, and none of it is searchable when you actually need it. This pulls the most-used resources into one fast page that works well on a phone at the bedside. What's in it: - A searchable library of clinical resources by specialty (cardiology, pulmonology, infectious disease, nephrology, and more) - Sections for rotations, committees, policies, didactics, and on-call guidance - Documentation templates and quick references - A clean, distraction-free reading view ### Post-Paracentesis Albumin Calculator 2026 - present · HTML, JavaScript, Tailwind CSS, PWA & Netlify · clinical · Active /project/albumin-calculator Albumin dosing and Epic order builder for large-volume paracentesis **Status:** Active **Timeline:** 2026 - present **Visit site:** [albumincalculator.netlify.app](https://albumincalculator.netlify.app) **Technologies:** HTML, JavaScript, Tailwind CSS, PWA & Netlify --- This calculator works out how much albumin to give after a large-volume paracentesis and builds the full Epic order to match. You enter the liters removed; it returns the dose, rounds it to whole 25 g bottles, works out the volume and rate, and tells you whether albumin is even indicated. The math is simple, 8 grams per liter removed, but the order around it is fiddly: rounding to bottles, a volume that changes with the product, a rate that has to match the duration, and an Epic order set with dozens of fields for what is really a single one-time dose. The tool keeps those small decisions in one place so they aren't carried in your head at the bedside. A few things it does: - Doses at 8 g per liter removed, rounded to whole 25 g bottles, with the raw and rounded amounts shown side by side - Flags when albumin isn't needed (5 L or less), when it's indicated regardless of volume (ACLF), and when a session goes past 8 L - Links volume, rate, and duration so setting any one fills in the rest, for both 25% and 5% albumin - Builds a complete, copyable Epic order with frequency preset to Once - Installs to a home screen, works offline, and has light and dark mode It's a single HTML file with vanilla JavaScript and Tailwind CSS, shipped as a progressive web app on Netlify. It's a clinical decision support tool, meant to back up clinical judgment, not replace it. ### DeckLabs 2026 - present · Next.js, Tailwind CSS, PWA & Netlify · clinical · Active /project/decklabs Examiner-style ABIM board-prep flashcards **Status:** Active **Timeline:** 2026 - present **Visit site:** [decklabs.netlify.app](https://decklabs.netlify.app) **Technologies:** Next.js, Tailwind CSS, PWA & Netlify --- DeckLabs is a private study app I built for ABIM board prep. It takes dense review decks and turns them into clean, examiner-style flashcards. The front of each card is a real exam-style question and the back is a focused explanation. You log in, study by subject, flip through cards, rate how well you knew each one, and the app remembers where you left off so you can pick back up later. The idea came from how I actually study. Long review documents are thorough but hard to drill from. Rewriting that material into one question per card, phrased the way the exam asks it, turns each card into a quick self-test instead of a wall of text to reread. Right now there are around 10,900 cards organized by subject, so I can work through one area at a time. A few things it does: - Examiner-style cards, with a real question on the front and the explanation on the back - Cards grouped by subject so each study session stays focused - A quick rating on every card to flag what needs another pass - Saved progress that picks up exactly where you left off - Private, members-only access behind a login - Installs to a home screen and runs without a reliable connection On the build side, it is a Next.js app on the App Router, styled with Tailwind CSS in a bold, high-contrast look. It ships as a progressive web app with a web manifest and offline support, and it deploys on Netlify. ### Abx Advisor 2026 - present · React, Vite, PWA & Netlify · clinical · Active /project/abx-advisor Empiric antibiotic guidance from clinical guidelines and a local antibiogram **Status:** Active **Timeline:** 2026 - present **Visit site:** [abxadvisor.netlify.app](https://abxadvisor.netlify.app) **Technologies:** React, Vite, PWA & Netlify --- Abx Advisor helps you pick empiric antibiotics. You give it the infection syndrome and a few patient details, point it at your hospital's antibiogram, and it returns a ranked set of regimens with first-line and alternative options. The recommendations follow Sanford Guide, IDSA, and OpenEvidence. It installs as a progressive web app, so it works on a phone at the bedside even without a solid connection. Empiric coverage is a lot to hold in your head at once. You're weighing the likely bugs for the site of infection against local resistance, the patient's allergies, and their renal function, usually while the clock is running. The app keeps that reasoning in one flow so you can start something defensible and narrow it down once cultures are back. You start by choosing the infection site: skin and soft tissue, respiratory, ENT, genitourinary, intra-abdominal, bloodstream, pelvic, tick-borne, and more. Then you add context like a penicillin or beta-lactam allergy, MRSA or Pseudomonas risk, and whether you want oral or IV. A few things it does that I find useful: - Tunes coverage to your own antibiogram (E. coli, Klebsiella, Pseudomonas, MRSA and MSSA, S. pneumoniae, Enterococcus, and others) - Drops beta-lactams and offers safe alternatives when there's a penicillin allergy - Adjusts doses for creatinine clearance - Groups options by drug class, including antifungal, antiviral, and antiparasitic agents - Installs to a home screen and runs without a reliable connection - Stays clearly educational, meant to back up clinical judgment rather than replace it ### Acute HF Predischarge Risk Calculator 2024 - present · React, TypeScript, Netlify · clinical · Active /project/ahf-risk-calculator Estimates 90-day heart failure hospitalization and death risk at discharge **Status:** Active **Timeline:** 2024 - present **Visit site:** [ahf-predischarge-risk-calculator.netlify.app](https://ahf-predischarge-risk-calculator.netlify.app) **Technologies:** React, TypeScript, Netlify --- This calculator estimates the chance of heart failure hospitalization or death within 90 days of discharge. It runs on four inputs and is meant to be quick enough to use on rounds. Readmissions after an acute heart failure stay are stubborn, and a lot rides on the discharge decision. A fast risk estimate helps with the call on disposition, how closely to follow up, and whether someone needs more optimization before they leave. It asks for four things: NT-proBNP, systolic blood pressure, left atrial volume index, and lung ultrasound B-lines. From those it places the patient on a 0 to 4 risk scale with plain-language guidance. You can expand any parameter to see what it means, which is handy for teaching, and copy a short summary straight into your note. The layout is built for a phone. ### PCA Calculator 2024 - present · React, Vite, Netlify · clinical · Active /project/pca-calculator Patient-controlled analgesia dose calculator **Status:** Active **Timeline:** 2024 - present **Visit site:** [pcacalc.netlify.app](https://pcacalc.netlify.app) **Technologies:** React, Vite, Netlify --- A dosing calculator for patient-controlled analgesia pumps. It helps inpatient teams set the infusion, demand dose, and lockout consistently instead of redoing the arithmetic by hand each time. PCA orders involve a handful of interlocking numbers (basal rate, demand dose, lockout interval, hourly limit), and they're easy to get wrong when you're busy. The tool does the math and shows sensible ranges for the common agents. It has agent-specific flows, calculates the basal, demand dose, lockout, and both the 1-hour and 4-hour limits, starts from conservative defaults with guidance inline, and works on a phone for on-call use. ### DCPlanner 2024 - present · React, Netlify · clinical · Active /project/dc-planner Discharge planning tool for hospitalized patients **Status:** Active **Timeline:** 2024 - present **Visit site:** [dcplanner.netlify.app](https://dcplanner.netlify.app) **Technologies:** React, Netlify --- DCPlanner helps internal medicine teams keep track of everything a hospital discharge involves: medications, follow-up, equipment, transportation, and patient education. A good discharge prevents readmissions, but it means coordinating a long checklist across nursing, case management, pharmacy, and outpatient clinics. This keeps that checklist in one place so the team can see what's still outstanding. The checklist is grouped by domain (meds, follow-up, equipment, education), items toggle on and off with a clear visual state, and you can copy a handoff summary to paste elsewhere. It's built to use on rounds from a phone. ### ACP-Equity Risk Index 2026 - present · SvelteKit, Tailwind CSS & Netlify · clinical · Active /project/acperi-tool Equity-focused advance care planning support for African-American patients **Status:** Active **Timeline:** 2026 - present **Visit site:** [acperitool.netlify.app](https://acperitool.netlify.app) **Technologies:** SvelteKit, Tailwind CSS & Netlify --- The ACP-Equity Risk Index is a clinical decision support tool for advance care planning, built around a problem that is well documented but rarely tooled for. African-American patients complete advance care plans at much lower rates, and the reasons usually come down to trust, communication, and culture rather than the medicine itself. At the bedside you work through a checklist, ticking the barriers that apply to the patient. The tool scores them into a composite risk index, surfaces the barrier domains that are driving it, and then generates tailored intervention recommendations with conversation guidance you can use in the room. The barriers are grouped into domains such as medical trust (say, a patient who voices distrust of providers or the health system), health literacy, religious and spiritual values, family dynamics, and language and communication. Each domain carries its own weight, so the result points you at what matters most for this particular person instead of a flat checklist. The intervention side is where the AI augmentation comes in. Based on the dominant domains, it suggests concrete next steps like bringing in palliative care, involving a faith community leader, switching to language-concordant materials, or adjusting the pace and framing of the conversation, each tied to evidence on what actually moves ACP completion in this population. I built it in SvelteKit with Tailwind and put it on Netlify. It is a decision aid, not a substitute for knowing your patient. ### Doctor's Dilemma 2024 - present · React, Netlify · clinical · Active /project/doctors-dilemma Internal medicine clinical knowledge quiz game **Status:** Active **Timeline:** 2024 - present **Visit site:** [ddilemma.netlify.app](https://ddilemma.netlify.app) **Technologies:** React, Netlify --- A quiz game modeled on the American College of Physicians' Doctor's Dilemma competition. I built it so residents can practice rapid-recall trivia across specialties in the same game-show format. Doctor's Dilemma is a long-running ACP tradition where residency teams go head to head on medical trivia. Between the live events there's nowhere to rehearse, so this gives residents a way to drill, solo or in teams, with questions spanning the IM subspecialties. It runs on a buzzer-style flow, tracks scores, and supports both team and solo play. The question bank covers cardiology, pulmonology, infectious disease, nephrology, GI, endocrine, rheumatology, and more, and the whole thing is mobile-friendly. ### NoteClean 2024 - present · React, Netlify · clinical · Active /project/note-clean Clinical note formatting and cleanup tool **Status:** Active **Timeline:** 2024 - present **Visit site:** [noteclean.netlify.app](https://noteclean.netlify.app) **Technologies:** React, Netlify --- NoteClean tidies up messy clinical text. Paste in copy-pasted EHR output and it strips the artifacts, fixes spacing, normalizes section headers, and hands back something clean enough to paste straight back into the chart. Notes pulled out of an EHR usually arrive full of navigation junk, duplicate headers, ragged line breaks, and odd capitalization. Fixing all that by hand is slow and easy to botch, so NoteClean does the pass for you. It works paste-in, clean-out. It removes boilerplate header and footer text, normalizes whitespace and casing, and leaves the real structure (assessment, plan, problem list) intact. Everything runs in the browser, so no PHI ever leaves your machine. ### Didactics Scheduler 2025 - present · React, Firebase, EmailJS, Netlify · developer · Active /project/didactics-scheduler Subspecialty lecture booking system for IM residency didactics **Status:** Active **Timeline:** 2025 - present **Visit site:** [didactics-scheduler.netlify.app](https://didactics-scheduler.netlify.app) **Technologies:** React, Firebase, EmailJS, Netlify --- A scheduling app for booking subspecialty lectures for the SGMC Health Internal Medicine Residency program's 2026 to 2027 academic year. It replaced the old email-and-spreadsheet routine. Lining up didactic talks across subspecialists, residents, and chiefs is a recurring headache. The app shows which slots are open, takes a booking with the topic and format (virtual or in person), and emails the administrator, which turns a multi-day email chain into a couple of clicks. Under the hood it's a React single-page app on Netlify. Firebase holds the slot availability and booking state, and EmailJS sends the confirmations and admin alerts. The booking UI is public, while edits after a booking go through the administrator. The main pieces are a calendar of open and booked slots, a booking form that captures name, email, topic, and format, virtual or in-person selection, automatic confirmation emails, and a contact path for changes. It's mobile-friendly. ### DotPhrase Search 2024 - present · React, Netlify · developer · Active /project/dotphrase-search Searchable repository of Epic EHR dot phrases and templates **Status:** Active **Timeline:** 2024 - present **Visit site:** [dotphrasesearch.netlify.app](https://dotphrasesearch.netlify.app) **Technologies:** React, Netlify --- A searchable catalog of Epic dot phrases and note templates. The idea is to find the right shortcut for a situation without scrolling through a wall of cryptic trigger names. Dot phrases are one of the better productivity wins in Epic, but institutional libraries grow into hundreds of entries with names nobody remembers. This indexes them by what they actually contain and what they're for, so you can search by intent rather than by trigger. You get full-text search across both the names and the expanded content, a preview of what each template expands to, one-click copy of the trigger, and tags by specialty and note type. It works on a phone. ### PDFPresent 2024 - present · React, PDF.js, Netlify · developer · Active /project/pdf-present PDF viewer and presentation tool with file management **Status:** Active **Timeline:** 2024 - present **Visit site:** [pdfpresent.netlify.app](https://pdfpresent.netlify.app) **Technologies:** React, PDF.js, Netlify --- A browser-based PDF viewer and presentation tool with sign-in and file selection. I made it to present slides and documents in a clean, fullscreen view without installing a separate viewer or slide app. Lecture slides, journal-club PDFs, and grand-rounds decks often need a presentation-grade viewer: fullscreen, simple controls, and reliable on whatever device is in the room. PDFPresent does that with nothing to install. It gives you presentation controls for viewing, file selection and management, and authentication for private documents. Rendering runs on PDF.js, and because it all happens in the browser it works on anything with a browser. ### SamuelEdusaMD January 2022 - present · Next.js 12, React 17, TypeScript, Styled-Components & Netlify · platform · Active /project/samueledusa-md Personal website **Status:** Active **Timeline:** January 2022 - present **Visit site:** [samueledusa.com](https://www.samueledusa.com) **Technologies:** Next.js 12, React 17, TypeScript, Styled-Components & Netlify --- My personal website and portfolio. It's where my medical career and my software work sit side by side, as a running resume, a blog, and a place to show projects. I'm a physician who also builds software, and I wanted one site that could hold both halves of that without picking a side. This is it. ## How it's built It's a Next.js 12 app that statically generates its pages, so it's fast and cheap to host. Pages live under `src/pages/` (medicine, software, blog, presentations, projects, contact), reusable components under `src/components/`, blog posts as Markdown with YAML front matter under `src/posts/`, and nearly all of the resume and project content sits in a single `siteconfig.json` so I can change content without touching components. The frontend is React 17 with TypeScript and Styled-Components for theming, using next/image for images and react-icons for icons. Posts are parsed with gray-matter, rendered with react-markdown plus rehype-raw, and code blocks are highlighted with react-syntax-highlighter in a custom dark theme. Reading time comes from the reading-time library, and the RSS feed is generated with Feed. ## Look and extras There's a full light and dark mode that remembers your choice. Light is a warm cream (`#fff1e5`), dark is near-black (`#111`), and the accent is a tropical-rainforest teal (`#0a5e66`). Type is Lora for titles, Lato for body, and Yellowtail for the script header. A few things beyond the basics: a built-in PDF viewer (via `@react-pdf-viewer`) for slides and certificates, a set of Netlify serverless functions that push messages and files to Telegram, PWA support through next-pwa, and privacy-friendly analytics with next-plausible. It deploys to Netlify from Bitbucket and exports statically for the CDN, and the only server-side bits are those Telegram functions. ### Samalla Clinic Ltd. November 2021 - present · StencilJS 2.14, Ionic Core 6, TypeScript, Markdown, Netlify & Bitbucket · platform · Active /project/samalla-clinic Official website of Samalla Clinic Ltd. **Status:** Active **Timeline:** November 2021 - present **Visit site:** [samallaclinicltd.com](https://www.samallaclinicltd.com) **Technologies:** StencilJS 2.14, Ionic Core 6, TypeScript, Markdown, Netlify & Bitbucket --- The official site for Samalla Clinic Ltd., a healthcare facility in New Gbawe, Accra, Ghana. It covers the clinic's services, staff, health blog, and contact details for patients and visitors. The clinic wanted a proper presence online: somewhere patients could see what services are offered, check operating hours, read health articles, and find out how to get in touch. The blog side carries pieces on hypertension, diabetes, malaria, and other common concerns. ## The stack It's built with StencilJS 2.14 and Ionic Core 6, which compile down to standard Web Components, so it loads fast and runs about anywhere. TypeScript handles type safety and stencil-router-v2 does the routing. Blog posts are written in Markdown and rendered with the marked library. There's no database and no admin panel. Content lives in static TypeScript data files and Markdown, and updates happen in code and get redeployed from Bitbucket. Hosting is Netlify, including a small serverless function (getArticles.js) for the markdown. Contact-form submissions go to the clinic's Telegram channel through the Telegram Bot API, and Tawk.to provides live chat. Styling is hand-rolled CSS with variables, Playfair Display and Open Sans, and Ionic's utilities, with no external CSS framework. It's set up as a PWA with a manifest and icons, with the service worker turned off. ## On the site - A services listing (OPD, in-patient care, ultrasound, laboratory, family planning, nutrition counseling, oncology) - A Markdown-powered health blog - Staff profiles and a Board of Directors section with resumes - A contact form with validation and Telegram notifications - The Tawk.to live-chat widget - Location and contact details with a Google Maps link - History and mission and vision pages - A mobile-first layout with breakpoints at 480, 768, 1024, and 1200px ### Samalla Beach House Website September 2020 - present · StencilJS 2.14, Ionic Core 6, TypeScript, Telegram Bot API & Netlify · platform · Active /project/samalla-beach-house Private beach house at Prampram, Ghana **Status:** Active **Timeline:** September 2020 - present **Visit site:** [samallabeachhouse.com](https://www.samallabeachhouse.com) **Technologies:** StencilJS 2.14, Ionic Core 6, TypeScript, Telegram Bot API & Netlify --- A site for a beachfront rental in Prampram, Ghana. It shows the property off with photos and gives guests what they need to book a coastal stay. The Samalla Beach House needed a presence online to bring in visitors and lay out the property, the amenities, and how to reserve a stay on the coast. ## Under the hood The site is built with StencilJS 2.14, which compiles reusable UI into Web Components, paired with Ionic Core 6 for the mobile-friendly pieces like slides, modals, and icons. It's TypeScript with TSX templates, routed by stencil-router-v2, and built and prerendered through the Stencil CLI. Stencil's Jest-based spec and e2e runners cover the tests. The output is a static site that drops onto Netlify or any static host. The whole thing comes to about 15 custom Web Components (hero, gallery, amenities, rooms, location, contact modal, and the rest). There's no database. Reservation forms post straight to a private Telegram channel through the Telegram Bot API, which doubles as a lightweight booking dashboard. Guests can also reach out over WhatsApp, Instagram, Facebook, Twitter, or email, and an embedded Google Map shows where the house is. ## What's on it - A photo gallery with a swipeable slider and navigation controls - A reservation form wired to Telegram notifications, so bookings land in real time - Sleeping arrangements (two bedrooms with queen beds and one sofa bed) - 17 amenities, including a kitchen, A/C, beachfront access, and free parking - An embedded Google Map with directions - A house-rules section - Contact options across WhatsApp, email, phone, and social media - Fast-loading Web Components with optional prerendering ### Samalla Clinic Ltd. Billing App January 2020 - present · Ionic, Bitbucket & Netlify. · platform · Active /project/samalla-billing Samalla Clinic Ltd. billing application A billing and invoicing app I built for Samalla Clinic Ltd. to handle patient billing, generate invoices, and track payments. The clinic wanted to get off paper and run its billing in one place. The app takes the whole flow, from registering a patient through generating an invoice and recording the payment. It's built with Ionic, so the same app works on desktop and mobile, and it's deployed on Netlify with the code kept in Bitbucket. It covers patient billing, invoice generation, and payment tracking, and being cloud-hosted it's reachable from any device. ## Blog ### Why you should be excited about GPT Dec 28, 2022 https://samueledusa.com/post/about-gpt ![AI Cover Image](/images/ai-cover.jpg "AI cover image") (Source: btlaw.com) GPT (Generative Pre-trained Transformer) is a language generation model developed by OpenAI. It was first released in 2018 and has been improved with each new version. ## What is GPT? GPT is a machine learning model trained to generate text. It works by predicting the next word in a sequence based on what came before. Give it "The cat sat on the" and it predicts "mat." Scale that up, and you get something that can write paragraphs, answer questions, and carry on conversations. What makes GPT different from earlier language models is the quality of its output. The text is coherent and reads naturally. This comes from the transformer architecture, introduced in the paper "Attention is All You Need", which lets the model process input of any length and pay attention to relevant context throughout. GPT is also pre-trained on a huge dataset, which helps it pick up on how language actually works, including idioms, tone, and context. ## Why it matters GPT changes how we can interact with computers. You can have a conversation with it, generate drafts of articles, summarize long documents, or translate between languages. These aren't hypothetical use cases anymore. People are doing all of this right now. Practical applications include automating customer service responses, improving machine translation quality, and building AI assistants that can handle complex, multi-turn conversations. The model isn't perfect, but it's good enough to be useful across a lot of tasks. The pace of improvement has been fast. Each new version handles more context, makes fewer errors, and handles more complex instructions. It's worth paying attention to where this goes. ### ACP Leadership Day on Capitol Hill 2026 May 14, 2026 https://samueledusa.com/post/acp-leadership-day-2026 I spent this week in Washington, D.C. for the American College of Physicians' Leadership Day on Capitol Hill. I went as part of the Georgia delegation and met with staff from both sides of the aisle to talk about issues that affect our patients and our profession. ACP Leadership Day 2026 ACP Leadership Day on Capitol Hill, 2026 ## The day before The Hill day did not start cold. The day before, ACP put us through a full schedule of speakers, briefings, and breakout sessions to get us ready. We heard from ACP leadership, policy staff, and seasoned advocates who walked us through the bills, the politics around them, and how to actually run a fifteen-minute meeting with a congressional staffer. We also got time with delegates from other states, attendings, residents, and medical students who came in from all over the country. Comparing notes with a med student from the Midwest and a hospitalist from the Northeast about what they were seeing in their hospitals was, by itself, worth the trip. By the time we walked out of the prep day, the asks felt rehearsed and the nerves were mostly gone. We also heard from Rep. Raul Ruiz, M.D. (CA-25) that morning, who shared the inspiring story of how he got to where he is today. He grew up in Coachella, California, the son of farmworkers. He graduated magna cum laude from UCLA and then went to Harvard, where he earned an M.D., a Master of Public Policy from the Kennedy School, and a Master of Public Health, the first Latino to earn three graduate degrees from Harvard. He trained in emergency medicine at the University of Pittsburgh, returned home to practice in the same valley he grew up in, started a pre-medical mentorship pipeline for local kids, and flew to Haiti within days of the 2010 earthquake to serve as a medical director on the ground. He was elected to Congress in 2012 and has been there since. A physician from a farmworker family speaking to a room full of doctors as a sitting member of Congress was a useful reminder that the path from the bedside to the policy table is not theoretical. People do walk it. ## The asks ACP sent us in with three priorities. They were specific, bipartisan, and easy to explain in the ten or fifteen minutes a congressional staffer typically gives you. 1. **The REDI Act (H.R. 2028 / S. 942).** Interest-free deferment on federal student loans during medical and dental residency. Residents are working full-time taking care of patients while their loans quietly grow. This one is personal for almost everyone in training. 2. **The Protecting Free Vaccines Act (H.R. 5448 / S. 2857).** Protects access to well-established vaccines without cost-sharing. Patients should not have to choose between a copay and a flu shot. 3. **The Provider Reimbursement Stability Act of 2026 (H.R. 8163).** A bipartisan fix to the annual Medicare fee schedule cuts driven by budget neutrality. Practices, especially small and rural ones like many in South Georgia, cannot keep absorbing year-over-year reductions. ## The day itself We met with Sen. Warnock's office, Sen. Ossoff's office, and Reps. Nikema Williams, Austin Scott, Lucy McBath, and Rick Allen. We did a drop-off at Rep. Brian Jack's office. Rep. Scott represents my district (GA-08), so that meeting felt closest to home. What surprised me was how much of the work is just showing up. Staffers are young, smart, and busy. They take notes. They ask sharp questions. Many of them had never spoken to a physician outside their own family doctor. Being in the room as the person who actually rounds on Medicare patients in Valdosta made the asks land differently than a one-pager in an inbox. ## What I took home - **Advocacy is part of the job.** Policy is upstream of every discharge plan I write. If I do not speak up about it, somebody else will speak for my patients, and they may not get it right. - **Bipartisan framing works.** None of the three asks were partisan. Loan deferment, vaccine access, and stable Medicare payments are physician and patient issues. Walking into a Republican office and a Democratic office with the same three asks, and getting genuine engagement in both, was a good reminder of that. - **Local stories beat national statistics.** What moved staffers was a specific patient or a specific clinic, not the 163,000-member talking point. I leaned on what I see in our hospital in Valdosta, and that is what they wrote down. - **The Georgia ACP delegation is a good group to learn from.** Rounding with more senior colleagues who have been making these asks for thirty years gave me a template I can use for the next thirty. - **Get involved.** If you are a colleague reading this and have not yet plugged into advocacy, consider this your invitation. Join the ACP's advocacy efforts at acponline.org/advocacy — sign up for action alerts, follow the policy briefings, and find your way to a Hill day. There is room at the table for more of us. ## Advocacy in Action The Georgia chapter also captured the experience on video: Robert Combs and I joined Dr. Dylan Baker, co-chair of the chapter's Health and Public Policy Committee, to reflect on our conversations with legislators, the College's legislative priorities, and why getting trainees and early-career physicians involved in advocacy matters.
Video from the ACP Georgia Chapter's About the Chapter page. ## Thanks Thank you to **SGMC Health** for supporting my participation, and to the **American College of Physicians** for organizing the day and giving residents a seat at the table. It is one thing to read about a bill in the morning report; it is another to ask a senator's office to put their name on it. I came home tired, sore-footed, and convinced this is worth doing every year I can. Putting Valdosta on the map Putting Valdosta on the map. ### A Simple Bedside Tool for Acute Heart Failure Discharge Risk March 7, 2026 https://samueledusa.com/post/ahf-predischarge-risk-calculator ![AHF Predischarge Risk Calculator](/images/ahf-calc.jpeg) Hospital discharge after acute heart failure (AHF) hospitalization is one of the most vulnerable periods for patients. Studies consistently show that the first 90 days after discharge carry a high risk of rehospitalization and mortality. Clinicians often have to make difficult decisions at discharge: - Is this patient stable enough to go home? - Do they need closer follow-up? - Should we reassess congestion before discharge? A recent study by Espersen et al. (2024) proposed a simple way to help answer these questions using only four clinical variables measured before discharge. To make this easier to use at the bedside, I built a simple calculator based on this model. ## The Acute Heart Failure Predischarge Risk Calculator The calculator estimates risk of 90-day heart failure hospitalization or all-cause mortality based on four factors measured before discharge. ## Variables Used in the Score The score assigns one point for each criterion met. | Variable | Threshold | |--------|--------| | NT-proBNP | ≥ 2000 pg/mL | | Systolic Blood Pressure | < 120 mmHg | | Left Atrial Volume Index (LAVI) | ≥ 60 mL/m² | | Lung Ultrasound B-Lines | ≥ 9 | Total possible score: **0-4** ## Interpreting the Score | Score | Risk Category | |-----|-----| | 0-1 | Lower risk | | 2 | Intermediate risk | | 3-4 | Higher risk | Higher scores indicate a greater likelihood of heart failure readmission or death within 90 days after discharge. This tool is not meant to replace clinical judgment but to support risk stratification during discharge planning. ## Why These Variables Matter ### NT-proBNP NT-proBNP reflects cardiac wall stress and congestion. Persistently elevated levels before discharge may indicate incomplete decongestion and ongoing cardiac strain. ### Systolic Blood Pressure Lower systolic blood pressure may indicate reduced cardiovascular reserve and has been associated with worse outcomes in heart failure populations. ### Left Atrial Volume Index (LAVI) LAVI reflects chronic elevation of left atrial pressures and serves as a marker of long-standing diastolic dysfunction. ### Lung Ultrasound B-Lines B-lines detected on lung ultrasound represent pulmonary congestion. Persistent B-lines before discharge suggest residual fluid overload. ## Suggested Clinical Use Patients identified as higher risk before discharge may benefit from: - Early cardiology follow-up - Reassessment of congestion - Optimization of guideline-directed medical therapy - Consideration of heart failure clinic referral Lower-risk patients may be appropriate for standard outpatient follow-up and routine monitoring. ## Demo of the calculator ![Demo of app](/images/ahf-record.gif) Try the AHF Predischarge Risk Calculator ## Why I Built This Calculator? Many existing medical calculators focus on diagnosis or long-term prognosis, but relatively few tools assist with discharge planning in acute heart failure. The model proposed by Espersen and colleagues is particularly useful because it: - Uses only four readily available clinical variables - Can be assessed immediately before discharge - Identifies patients at higher short-term risk By converting the model into a simple calculator, the goal is to make the research easier to apply in everyday clinical practice. Try the AHF Predischarge Risk Calculator ## Study Reference Espersen C, et al. Predictors of heart failure readmission and all-cause mortality in patients with acute heart failure. International Journal of Cardiology. 2024. DOI: 10.1016/j.ijcard.2024.132036 ## Clinical Disclaimer This calculator is intended for educational and clinical support purposes only. It should not replace clinical judgment, guideline-directed care, or individualized patient assessment. ### Unraveling AI Lingo (Part 2) Apr 18, 2023 https://samueledusa.com/post/ai-terminolgy-tango ![Robot teaching students](/images/ai-robot-teaching-students.jpg "Robot teaching students") Robot teaching students (created using Stable Diffusion) If you're trying to catch up on AI terminology and don't know where to start, here's a glossary of the terms that come up most often. I pulled this together from the NYT's AI glossary and my own reading. ## Large Language Model (LLM) A type of neural network trained on massive amounts of text from the internet. LLMs learn to write, hold conversations, and generate code. They work by predicting the next word in a sequence, but along the way they pick up abilities that surprised even the people who built them. ## Generative AI Technology that creates new content (text, images, video, code) by learning patterns from training data. ChatGPT generates text; DALL-E and Midjourney generate images. ## Transformer Model A neural network architecture that processes an entire sentence at once rather than word by word. It uses "self-attention" to figure out which words in a sentence are most relevant to understanding the meaning. This is the architecture behind GPT and most modern language models. ## Parameters The numeric values inside a language model that determine how it behaves. Think of them as the knobs the model adjusts during training to get better at predicting text. Modern models like GPT-4 have hundreds of billions of parameters. ## Reinforcement Learning A training method where the model learns through trial and error, receiving rewards or penalties based on its performance. When combined with human feedback (RLHF), humans rate the model's outputs, and the model adjusts to produce better responses. ## Hallucination When an LLM generates something that sounds confident but is factually wrong, irrelevant, or nonsensical. This happens because the model is predicting plausible-sounding text, not checking facts. ## Bias Errors in a model's output that reflect biases in its training data. For example, a model might associate certain jobs with a particular gender or race because its training data contained those patterns. ## Anthropomorphism The tendency to treat AI chatbots as if they have feelings, intentions, or consciousness. When a chatbot responds politely, people sometimes assume it's being kind. It's not. It's predicting text. ## Natural Language Processing The techniques used to make computers understand and generate human language. This includes text classification, sentiment analysis, translation, and summarization. NLP uses a mix of machine learning, statistical models, and linguistic rules. ## Emergent behavior Capabilities that appear in a model that weren't explicitly trained for. For instance, an LLM trained on code repositories can write new code, and models trained on general text turn out to be able to write poetry or solve math problems. ## Alignment The ongoing effort to make sure AI systems behave in ways that match the values and goals set by their creators. This is one of the harder unsolved problems in AI. ## Multimodal systems AI systems that can process more than just text. They handle images, audio, video, and other inputs. GPT-4 with vision is an example. ## Artificial General Intelligence (AGI) A hypothetical AI system that can do anything a human mind can do. We're not there yet, and there's active debate about what "getting there" would even mean.
--- ## References - _Artifical Intelligence Glossary_ - https://www.nytimes.com/article/ai-artificial-intelligence-glossary.html ### Inducted into Alpha Omega Alpha April 28, 2026 https://samueledusa.com/post/alpha-omega-alpha-induction I was recently inducted into Alpha Omega Alpha, the national medical honor society. The plaque arrived in the mail and I sat with it for a while before hanging it up. ![AOA plaque](/images/aoa-plaque.jpeg) The plaque from my induction into Alpha Omega Alpha ## What AOA is Alpha Omega Alpha (AΩA) was founded in 1902 at the College of Medicine of the University of Illinois. It's the only national medical honor society in the United States. Membership is granted to medical students, residents, fellows, faculty, and alumni who are recognized for academic excellence, professionalism, leadership, and a commitment to service. The society's motto is *"Be worthy to serve the suffering."* That line has stuck with me more than the rest of it. It's not about being the smartest person in the room. It's about earning the right to take care of people during the hardest moments of their lives. AOA chapters at medical schools and residency programs nominate members each year. Selection is competitive, but the criteria go beyond grades and test scores. Character, leadership, and service to the profession all factor in. The society also funds research grants, fellowships, and visiting professorships, and publishes *The Pharos*, a quarterly journal on medicine, history, and the humanities. ## What it means to me I won't pretend induction into a society fixes the hard parts of training. The bad calls, the patients you couldn't save, the discharge summaries you write at 9 PM - none of that goes away because someone hands you a plaque. But I'll be honest. It meant something to be recognized. My path to medicine wasn't a straight line, and there were stretches where I wasn't sure I belonged in the room. Being selected by colleagues and mentors who've watched me work was a quiet kind of validation. More than that, the motto sits with me. *Be worthy to serve the suffering.* It's a high bar, and it's one that has to be earned again every shift, every patient, every conversation with a family. The plaque on the wall is a reminder, not a finish line. ## Moving forward I'm grateful to the SGMC Health Internal Medicine Residency program, the attendings who taught me, and the colleagues who nominated me. AOA membership is for life, and I want to use it the way it's intended. To stay involved in the profession, to mentor those coming up behind me, and to keep showing up for patients in the way the motto asks. The plaque is on the wall now. The work continues. ### Building An Evidence-Based Ambulatory Triage Calculator July 1, 2025 https://samueledusa.com/post/amb-triage-calculator You're in clinic and a patient needs admission. Do they go directly to the floor or through the ED? It sounds simple, but getting it wrong matters. Send someone to the floor who needed the ED, and you miss a window for stabilization. Send a stable patient through the ED unnecessarily, and you've just added hours to their day and clogged an already busy department. ## The problem This decision usually comes down to gut feeling and experience. Seasoned attendings develop the instinct over time, but residents and newer clinicians don't have that yet. And even experienced physicians aren't always consistent about it. ## What I built I built an **Ambulatory Triage Calculator** that standardizes this decision using validated clinical scoring systems. It pulls from three established tools: - **HOSPITAL Score** (C-statistic 0.72, n=117,065) - predicts 30-day readmission risk - **National Early Warning Score 2 (NEWS2)** (AUROC 0.86 for mortality) - identifies patients at risk of deterioration - **Glasgow Admission Prediction Score** (AUROC 0.741) - predicts need for hospital admission ## How It Works The calculator evaluates patients across three key domains: ### 1. Vital Signs & Clinical Presentation (0-7 points) - Temperature >38.5°C (101.3°F): +1 point - Heart Rate 100-119 bpm: +1 point - Respiratory Rate 20-23/min: +1 point - Systolic BP 90-100 mmHg: +2 points - O₂ Saturation 90-94%: +2 points ### 2. Patient Risk Factors (0-5 points) - Age ≥75 years: +1 point - ≥3 Active Medical Problems: +1 point - Hospitalization within 30 days: +2 points - Limited Home Support/Lives Alone: +1 point ### 3. Clinical Concern Factors (0-5 points) - Unclear Diagnosis Requiring Workup: +2 points - Likely Needs Specialist Consultation: +1 point - Significant Lab Abnormalities: +1 point - Urgent Imaging Required: +1 point ## Risk Stratification Based on the total score, patients are categorized into three risk levels: - **0-3 points (Low Risk)**: Direct Admission recommended - **4-6 points (Moderate Risk)**: Direct Admission or ED Transfer (clinical judgment) - **≥7 points (High Risk)**: ED Transfer recommended ## Using the calculator ![using the calc](/images/calc.gif){:class="gif"} ## Important Safety Features The calculator includes absolute contraindications that mandate immediate ED transfer regardless of score: - Hemodynamic instability - Respiratory distress (O₂ sat <90%, RR >24/min with distress) - Altered mental status or acute neurological symptoms - Chest pain with abnormal EKG or suspected acute coronary syndrome - Active bleeding or severe pain ## Building the app The Ambulatory Triage Calculator is built with vanilla HTML, CSS, and JavaScript. No framework needed. The calculator does basic math and doesn't need state management or API calls, so keeping it simple made sense. It loads fast, works offline once cached, and runs on any device with a browser. I deployed it on Surge.sh because the workflow is dead simple: run `surge` from the command line and you're live. HTTPS by default, good uptime, free tier covers everything. For a clinical tool that needs to be reliably available, it works well. ## Why it helps The calculator does a few things: it makes the decision consistent regardless of who's using it, it reduces the mental overhead on a busy clinic day, and it creates a record of the clinical reasoning behind the triage choice. For residents, it's a structured way to think through a decision that otherwise relies on pattern recognition they haven't built up yet. ## Wrapping up This isn't meant to replace clinical judgment. It's a tool to support it. The scoring system gives you a framework, but you still have to use your brain. If something feels off about a patient, trust that instinct regardless of what the score says.

## References 1. Donzé J, Aujesky D, Williams D, Schnipper JL. Potentially Avoidable 30-Day Hospital Readmissions in Medical Patients: Derivation and Validation of a Prediction Model. JAMA Internal Medicine. 2013;173(8):632-638. 2. Smith GB, Prytherch DR, Meredith P, Schmidt PE, Featherstone PI. The ability of the National Early Warning Score (NEWS) to discriminate patients at risk of early cardiac arrest, unanticipated intensive care unit admission, and death. Resuscitation. 2013;84(4):465-470. 3. Cameron A, Rodgers K, Ireland A, Jamdar R, McKay GA. A simple tool to predict admission at the time of triage. Emergency Medicine Journal. 2015;32(3):174-179. 4. Lewis G, Kirkham H, Duncan I, Vaithianathan R. How health systems could avert 'triple fail' events that are harmful, costly, and ineffective. Health Affairs. 2013;32(4):669-676. 5. Lim WS, van der Eerden MM, Laing R, et al. Defining community acquired pneumonia severity on presentation to hospital: an international derivation and validation study. Thorax. 2003;58(5):377-382. 6. Subbe CP, Kruger M, Rutherford P, Gemmel L. Validation of a modified Early Warning Score in medical admissions. QJM. 2001;94(10):521-526. 7. Howell E, Bessman E, Marshall R, Wright S. Hospitalist bed management effecting throughput from the emergency department to the intensive care unit. Journal of Critical Care. 2010;25(2):184-189. ### I Built a Mac Shortcut to Parse School Flyers September 27, 2025 https://samueledusa.com/post/automating-family-chaos This weekend project started when my wife asked me if I could help her build something to manage the constant flood of emails and flyers she was getting daily. Between school announcements, sports schedules, and after-school activities, she was drowning in event notifications. Every day brought another handful of dates and times that needed to get onto our family calendar, and she was spending way too much time manually entering everything. Turns out there is a better way, and it involves a little automation. ## The Problem Schools love paper flyers. Picture days, bake sales, field trips, parent-teacher conferences. They all come home as crumpled pieces of paper in a backpack. Add to that the emails with attached PDFs and image files of event announcements, and you've got an overwhelming amount of information to process. My wife got in the habit of photographing the paper ones, which is smart, but then someone still had to actually put these events on the calendar. She'd carved out time each evening just to go through everything and manually create calendar entries, and it was eating up her day. ## The Solution I figured if I could take a photo of a flyer and have it automatically create a calendar event, that would solve everything. Mac Shortcuts can do this, but it took some trial and error to get it working properly. ![PicCalConvert Shortcut](../images/picconvert.jpeg) Screenshot showing the PicCalConvert shortcut Here's what I built: ### Step 1: Getting the Photo In First thing was adding a way to grab photos. I used the `Select Photos` action in Shortcuts because we already had pictures of most flyers. You could use `Take Photo` if you wanted to capture them on the spot, but honestly, the photo library route made more sense for us. ### Step 2: Reading the Text This part was easier than I expected. There's a built-in `Extract text from photo` action that uses OCR to pull all the text out of an image. I just dragged it into the workflow and connected it to the photo input. Mac's text recognition is actually pretty solid these days. It handled different fonts and even slightly blurry photos better than I thought it would. ### Step 3: The ChatGPT Integration (Where Things Got Interesting) Here's where I had to get creative. Raw text from a flyer is a mess. Dates are written as `Mon 3/15` or `March 15th at 2pm` or sometimes just `next Friday.` I needed something that could look at that jumble and figure out what was actually important. I decided to use ChatGPT's API because it's pretty good at understanding context. The setup was more involved than I'd like: I added a `Get Contents of URL` action and pointed it at OpenAI's API endpoint. The configuration looked like this: - URL: `https://api.openai.com/v1/chat/completions` - Method: POST - Headers: One for `Content-Type: application/json`, another for `Authorization: Bearer [my-api-key]` - Request Body: This is where it got fiddly ![API Configuration](../images/api-config.jpeg) Screenshot showing ChatGPT API configuration in Shortcuts ### Step 4: Crafting the JSON Request The Request Body uses a visual dictionary editor now, which is both better and worse than raw JSON. Better because it's less likely to have syntax errors, worse because it crashes sometimes when you're building complex structures. I basically told ChatGPT: `Here's a bunch of text from an event flyer. Give me back structured data in this exact format.` The system prompt was important. I had to emphasize that it should ONLY return JSON, no extra commentary, and to use reasonable defaults if information was missing. The hardest part was handling dates. Flyers write dates in every format imaginable. I told ChatGPT to be flexible with formats and default to tomorrow's date if nothing was clear, which worked surprisingly well. ### Step 5: Parsing the Response ChatGPT sends back a nested JSON structure, so I had to chain together four `Get Dictionary Value` actions to drill down through: `choices` → `0` → `message` → `content`. This gave me the actual JSON string with the event details. Then I used `Get Dictionary from Input` to convert that JSON text back into something Shortcuts could work with. ### Step 6: Extracting Individual Fields At this point I had structured data, so I added six more `Get Dictionary Value` actions to pull out: ``` - Title - Date - Time - Location - Duration - Notes ``` Each one grabs its specific piece of information from the parsed response. ### Step 7: The Date/Time Problem This was honestly the most annoying part. Shortcuts wants a proper date object, but I had separate date and time strings. I ended up using a `Text` action to combine them (date + space + time + space + AM/PM), then `Get Dates from Input` to parse that into an actual date object. ### Step 8: Creating the Calendar Event Finally, the payoff. I added "Event" and mapped all my variables to the appropriate fields: title, location, start date, notes. Duration gets set from what ChatGPT parsed (defaulting to 60 minutes). ### Step 9: Confirmation Threw in a `Show Notification` at the end so we'd know it worked. Nothing fancy, just `Event created: [event title]` so there's immediate feedback. ## What I Learned **The OCR is better than I expected.** Even with mediocre photo quality, it pulls out text reliably. **ChatGPT is overkill but worth it.** I could've written a bunch of regex patterns to parse dates and times, but honestly, that would've taken forever and broken constantly. Paying a few cents per API call to have ChatGPT figure it out was way easier. **Shortcuts crashes sometimes.** Particularly when editing complex JSON in the Request Body. If you run into this, build your JSON in a separate Text action and pass that as the body instead. **Date handling is always the hard part.** Every time. Always. ## Does It Actually Work? Yeah, surprisingly well. My wife now just runs the shortcut when she photographs a flyer or saves an image from an email, and the event shows up on our shared family calendar. What used to take her 20-30 minutes each evening now takes seconds. She's gotten that time back to actually, you know, relax after dealing with everything else. The only gotcha is you need an OpenAI API key, which requires an account and costs a tiny bit per request. I've probably spent $2 total over three months of use. Worth it to give my wife back her evenings. ![Shortcut flow](../images/shortcut-flow.gif){:class="gif"} Screen recording showing Shortcut flow ## The Code (Sort of) I can't paste the actual Shortcut file here, but if you're trying to build this yourself, the key is structuring your ChatGPT prompt correctly. Tell it exactly what JSON format you want back, emphasize that it should ONLY return JSON (no explanatory text), and give it rules for handling missing information. The system prompt I used was something like: "You're an expert at parsing event information. Always respond with ONLY valid JSON. If info is missing, use reasonable defaults. Dates should be YYYY-MM-DD, times should be HH:MM with separate AM/PM field." And the user prompt was: `Extract event details from this text and respond ONLY with valid JSON in this exact format: {title, date, time, ampm, location, duration, notes}. Rules: [various rules for handling edge cases]. Text: [the extracted text]` ## Would I Recommend This? If you're drowning in school event flyers and you're comfortable with basic API setup, absolutely. It took me an afternoon to build and debug, but it's saved way more time than that already. Plus, there's something deeply satisfying about pointing your phone at a piece of paper and watching a calendar event magically appear. My wife was skeptical at first about whether it would actually work reliably, but now she uses it for everything. Not just school events, but community stuff, kids' sports schedules, you name it. Technology should make life easier. This actually does. ### Building the Azalea Report Sept 10, 2024 https://samueledusa.com/post/azalea-report ![vscode](/images/vscode.jpeg) Screenshot showing code from code editor I built the Azalea Report, SGMC Health's Internal Medicine Residency Newsletter, as a web app. Here's how I put it together using Next.js and Decap CMS. ## Project overview The Azalea Report is an online newsletter for the SGMC Health Internal Medicine Residency program. It needed to look good on any device and be easy for non-technical staff to update. ## Tech stack - Next.js for the framework and static site generation - Github for the repository (link here) - Decap CMS so non-developers can edit content - CSS Modules for styling - Netlify for deployment and hosting ## Built in a weekend I put this together over a weekend. Using LLM tools integrated into VSCode sped things up considerably. Tasks like scaffolding components and writing boilerplate that would normally eat up hours got done in minutes. ## Setup 1. Created a new Next.js project and installed dependencies 2. Set up `public/admin` with HTML and config files for Decap CMS 3. Defined content models in `public/admin/config.yml` for resident spotlights, events, and program stats 4. Built the homepage in `pages/index.js`, pulling content from Markdown files 5. Styled everything with CSS Modules in `styles/Home.module.css` 6. Configured `next.config.js` for static site generation and image optimization ## Features - **Dynamic content sections**: The homepage renders sections like "Resident Spotlight," "Chat With Our Chiefs," and "Things to Do in Valdosta" from Markdown files - **Responsive design**: Mobile-first layout that works on phones, tablets, and desktops - **Image carousel**: A simple carousel for the "Photos of the Month" section - **CMS editing**: Non-technical staff update content through Decap CMS without touching code ## What I ran into - **Image handling**: I used Next.js's Image component configured for static exports to keep load times fast - **Content structure**: Balancing flexibility with simplicity in the CMS content model took a few iterations - **Responsive layout**: CSS Grid, Flexbox, and media queries got the layout working across screen sizes ## Wrapping up The newsletter is live and the residency program staff can update it on their own. Domain was purchased through Namecheap. The whole thing went from idea to production in a weekend. ### A Christmas Reflection Dec 21, 2024 https://samueledusa.com/post/christmas-shoes _**Note:** Names and certain details in this story have been modified to protect patient privacy._ The hospital is always busy, always rushing. But sometimes a patient makes you slow down. For me, that was Mr. B. He was on my inpatient service, admitted for uncontrolled type 2 diabetes. His situation was complicated beyond the medical: he lived in a government-sponsored assisted living facility with no family support, and his discharge was held up by a pending adult protective services case. But what I remember most about him isn't any of that. It's how kind he was, even in the middle of everything he was going through. As Christmas got closer, I stopped by his room and asked what he wanted for Christmas. He said a pair of shoes. That was it. Just shoes. ![A pair of shoes and socks](/images/shoes.jpg "Christmas gift") New shoes and socks donated for a patient in need Medical school teaches you treatment algorithms and evidence-based protocols. It doesn't teach you what to do when a patient asks for shoes for Christmas. But those moments matter. Mr. B. wasn't a set of diagnoses and lab values. He was a person who wanted shoes. When I brought him the shoes and socks, the look on his face is something I won't forget. It reminded me why I went into medicine in the first place. Not the science part, which I also love, but the part where you get to actually help someone. We enter our patients' lives during some of their worst moments. Asking "How are you really doing?" isn't just small talk. Those conversations sometimes reveal things about a patient's life that change how you approach their care. Things a chart review never would. It's easy in a busy hospital to forget that sometimes the best thing you can do for a patient isn't an order in the EMR. Sometimes it's just being there. Mr. B. reminded me of that. I'm grateful he did. Merry Christmas to everyone in healthcare who's working through the holidays. Take the extra moment when you can. Wishing you and yours a peaceful holiday season. 🎅🏽🎄 ### He Drank a Bottle of Ice-Cold Water at 2 AM. His Heart Spent the Next 22 Hours Out of Rhythm. June 1, 2026 https://samueledusa.com/post/cold-drink-heart _**Note:** Identifying details in this story have been modified to protect patient privacy._ He had finished a long shift, gotten home late, and reached for a bottle of ice-cold water before bed. He drank it the way most of us would drink it. Fast, in one go. Within minutes, his chest started to flutter. It was just after 2 in the morning. He was in his mid-thirties, an active-duty military aircrew member, the kind of patient who almost never shows up on a cardiology consult. No high blood pressure. No diabetes. No medications. No family history of arrhythmia or sudden death. He flew complicated missions for a living and had passed every flight physical he had ever been given. Something was now wrong with his heart, and it had started right after a swallow of cold water. ![Close-up of a cold drink](/images/cold-drink-heart-main.jpeg "ECG tracing") Photo by Joachim Schnürle | Unsplash ## When the Heart Won't Settle He felt pressure first, then the fluttering. Then sweating, a clammy coolness on his skin, and the strange certainty that he was about to pass out. He stayed flat in bed because standing made it worse. When morning came and he tried to get up, tunnel vision forced him back down. A clinician at his unit ran an electrocardiogram. The tracing told the story right away. The P waves were gone. The rhythm was irregularly irregular. The diagnosis was atrial fibrillation. EKG tracing of atrial fibrillation EKG tracing on arrival to the ED
By the time he reached the emergency department, he was rate-controlled in the 80s, alert, oxygenating well on room air, blood pressure normal. He looked like a healthy young man in a hospital gown who happened to be in the wrong rhythm. His labs were unremarkable. Troponin was negative. Thyroid was normal. Potassium and magnesium were fine. The chest X-ray was clean. His echocardiogram showed a structurally normal heart, with an ejection fraction in the low-60s and a left atrium that had not been pushed out of shape by years of disease. His CHA2DS2-VASc score was 0. That is unusual. Atrial fibrillation in a young person with a normal heart is uncommon enough that, when it shows up, you owe it to the patient to figure out what tripped the switch. ## Why the Cold Drink Mattered Most atrial fibrillation lives in older patients with hypertension, valve disease, or some other comorbidity that has been remodeling the atria for years. When it appears in a healthy 30-something with no risk factors, the autonomic nervous system is often the place to look. In the 1990s, the French electrophysiologist Philippe Coumel described a vagally mediated form of paroxysmal atrial fibrillation that prefers young men, structurally normal hearts, and quiet moments. Night. Rest. After a meal. After a cold drink. Times when parasympathetic tone is high. The mechanism is anatomical, and it is closer than most clinicians realize. The esophagus sits directly behind the left atrium. A cold bolus moving through it can stimulate thermoreceptors and stretch receptors in the esophageal wall, fire vagal afferents back to the brainstem, and send an efferent vagal discharge straight to the atrial myocardium. That discharge shortens and disperses the atrial refractory period. In a susceptible heart, that is enough to start atrial fibrillation. Patients have been describing this link for decades, often to skeptical clinicians. There are case reports of "brain freeze" atrial fibrillation after a frozen drink, of a triathlete who could reproduce his arrhythmia with ice water but not with room-temperature water, and a 2025 series in which most patients with cold-drink-triggered AFib were able to reduce or eliminate episodes simply by avoiding cold food and drink. Some authors have started calling the entity *cold drink heart*. It is real. It is under-recognized. And it is easy to miss if you do not ask. ## When Treatment Doesn't Work, and the Rhythm Goes Anyway He got diltiazem for rate. Then, after a cardiology discussion, a single 300 mg oral dose of flecainide as a pill-in-the-pocket attempt at chemical cardioversion. Three hours of monitoring. No conversion. He went for synchronized cardioversion under brief sedation. A single 200-joule biphasic shock in the anterior-posterior configuration. No conversion. This is the part of the case that I keep coming back to. He had failed two reasonable rhythm-control attempts, the kind of failure that, on a busy night, would push some teams toward escalation. He was hemodynamically stable, so we admitted him, replaced potassium and magnesium to comfortable margins, and waited. Around midnight, about 22 hours after symptom onset, his rhythm corrected itself. He stayed in sinus rhythm afterward. The post-conversion ECG showed a borderline-prolonged PR interval. That subtle finding is, in this context, almost a fingerprint of the vagal tone that drove the whole event. Vagal paroxysms are often self-limited. A failed shock in this setting is not a reason to keep escalating. Sometimes the most important thing the team does is stay calm and stay out of the way. ## What He Was Discharged With Wasn't Really a Pill He went home the next day on aspirin 81 mg for four weeks. No long-term anticoagulation, because his CHA2DS2-VASc was 0. No antiarrhythmic, because chronic suppression for a single triggered episode in a structurally normal heart would have been overkill. He was cleared to return to full flight duty. The real prescription was a conversation. Avoid cold liquids. Lose some weight, his BMI was 36. Get a sleep study, because obstructive sleep apnea would lower the threshold for the next episode. Modern guidelines are very clear that lifestyle and risk-factor modification belong at the front of atrial fibrillation care, not at the back. The I-STOP-AFib trial showed that even individualized trigger testing reduces self-reported AFib episodes. The Voskoboinik alcohol-abstinence trial showed that addressing one trigger, in that case alcohol, lowered both recurrence and burden. For this patient, the analogous moves were obvious and free. Skip the ice water. Drop the weight. Find out if he is desaturating at night. ## What I Took Away From This There is a question that I now ask every young patient who comes in with new atrial fibrillation. What were you doing in the seconds before it started? Most of the time the answer is unrevealing. Sometimes it is. A cold smoothie. A glass of ice water with dinner. A bowl of shaved ice on a hot afternoon. The history is free, and it can change the whole conversation about what this episode means, what the patient needs, and what they do not need. Our team is writing this case up for publication, because the textbook description is one thing and the bedside version is another. A healthy aircrew member. A bottle of ice water at 2 in the morning. A rhythm that resisted a drug and a shock and then ended on its own. A discharge plan built around a habit, not a pill. Cold drink heart deserves a place in the differential. Ask the question.

--- _This case is part of a collection of cases I have seen during my internal medicine rotation, written in the style of The New York Times Diagnosis column, which I subscribe to and enjoy reading. A formal case report on this patient is in preparation with my co-authors Rawa Salih, Patrick Joseph, and Mohab Hassib at SGMC Health, Valdosta, Georgia._ ### Heart Stopped in a Heartbeat: The Dangers of Commotio Cordis Jan 4, 2023 https://samueledusa.com/post/commotio-cordis ![AI Cover Image](/images/commotio-cordis.jpg "AI cover image") (Source: New England Journal Of Medicine (NEJM)) ### What is commotio cordis? Commotio cordis happens when a blunt hit to the chest stuns the heart. It's rare, but it's serious. It mostly affects young athletes playing contact sports like football, hockey, and lacrosse, though it can happen to anyone. The hit doesn't have to be hard. There doesn't even have to be a visible injury. What matters is timing: if the impact lands during a narrow window of vulnerability in the heart's electrical cycle, it can cause the heart to stop beating effectively. That's cardiac arrest. ### How is it managed? CPR and defibrillation need to start as soon as possible. Survival rates drop fast with each passing minute. Beyond that, treatment may include medications to support blood flow and supportive care like oxygen therapy and monitoring. ### Prevention Chest protectors and padding help in contact sports. Coaches, athletes, and parents should know the signs and have access to an AED (automated external defibrillator). If someone takes a hit to the chest and collapses, don't wait. Start CPR and call for help immediately. ### Further reading Here is a detailed blog article written by a colleague and friend Collins A. Kwarteng MD, FACC, titled "The near tragedy during Monday Night Football - The Damar Hamlin Incident. Was It Commotio Cordis?". ### Why I Stopped Paying $150 a Month to Ask My AI the Same Questions Apr 8, 2026 https://samueledusa.com/post/consult-chain ![Rasperry Pi on Desk](/images/raspi-on-desk.jpeg) *Samuel Edusa, MD. "An AI Generated Sketch of a Raspberry Pi on my desk." 2026, Digital artwork generated using Google Gemini. Personal collection.* I run a personal AI assistant on a Raspberry Pi. A tiny computer the size of a credit card that sits on my desk. It helps me write code, answer questions, and manage knowledge across my projects. The problem was the bill. Every time I asked it something, it was calling the most expensive AI model available, even for questions it had already answered yesterday. That's like paging a subspecialist every time you need a Band-Aid. So I built a system that fixed it. My monthly bill dropped from around $150 to under $2. Here's how, explained in ways that don't require a computer science degree. ## The Hospital Analogy Imagine you walk into an emergency room with a paper cut. In a normal hospital, you'd see the triage nurse first. She'd look at it, hand you a bandage, and send you on your way. You'd never see a surgeon. But what if every patient (paper cut or heart attack) went directly to the subspecialist? Not because anyone decided the case was that complex, but because the hospital didn't bother triaging. The subspecialist would spend their day on problems that any nurse could have handled, the wait times would be absurd, and the hospital would hemorrhage money. That's how most AI setups work. Every question, no matter how simple, gets routed to the most powerful AI model. Ask it what time zone London is in? Same cost as asking it to redesign your entire software architecture. There's no triage. No matching the problem to the right level of expertise. My system works like a well-run ER. I have ten AI models with different levels of capability. Every question goes through triage first, and each clinician works at the top of their scope. **The triage nurse** (a model that costs $0.11 per million words) does the initial assessment. Is this straightforward, or does it need to go further? About 75% of the time, it's within their scope of practice and they handle it right there. A nurse applying a bandage isn't doing less important work than a surgeon. They're doing the right work for the problem. **The resident** ($0.30 per million words) picks up the next 15%. These need more clinical reasoning but are well within what a trainee with solid fundamentals can manage. The bread-and-butter cases. **The attending physician** ($1 per million words) handles 6%. The cases that require the judgment that comes with years of independent practice. **The specialist** ($3 per million words) handles 3%. These are focused, multi-step problems within a specific domain where general training isn't enough. **The subspecialist** ($5-25 per million words) handles less than 1%. These are the rare and complex cases. The ones where you need someone who has spent years going deep on a narrow problem. They should be doing this work, not answering questions a resident could handle. Here's the key: each doctor writes a brief note before referring up. The specialist doesn't re-examine the patient from scratch. They read the notes from everyone below them and focus only on what they couldn't figure out. By the time the subspecialist sees a case, they're reading a one-page summary, not a 50-page medical history. ## The Library Analogy The second piece is how the system remembers things. Imagine a librarian who, every time you asked a question, walked into the stacks, pulled 200 books off the shelves, read them all, gave you an answer, and then put them all back. Tomorrow you ask the same question, and she does the whole thing again. That's how AI normally works. No memory between conversations. My system has a different kind of library. I call it the crystal lattice, but you can think of it as a librarian who takes notes. When the system learns something new (say, how my payment processing code works), it writes it on an index card. That card starts out in pencil. It's a guess, unverified. If the system encounters the same information from a different source, it goes over the pencil in pen. After four independent confirmations, the card gets laminated. Now it's trusted knowledge. Laminated cards get filed in a cross-referenced system. "Payment processing" links to "error handling" links to "retry logic." Over time, the library builds itself. Here's the clever part: if new information contradicts a laminated card, the card gets torn up. Both the old and new claims start over as pencil cards and have to prove themselves again. The library corrects itself automatically. Bad information doesn't sit there quietly getting stale. It breaks apart. When someone asks a question, the librarian checks the card catalog first. If a laminated card covers it, she answers in seconds without pulling a single book off the shelf. That's zero cost. ## The Memory Analogy The third piece is how the system remembers what happened in past conversations. Think about how your brain works. If you burn your hand on a hot stove, you remember that vividly. If someone tells you a random fact at a party, you probably forget it by next week. Your brain doesn't treat all memories equally. Important ones get strengthened, irrelevant ones fade. My system does the same thing. Every interaction creates a memory pathway. If that pathway gets used again (you ask a similar question, or the same solution works twice), it gets stronger. If a pathway leads to a mistake, it gets weaker. If it sits unused for three days, it starts fading. Pathways that stay strong for a full week get promoted to permanent memory. These are the system's expertise. The things it's proven it knows. They're fast to recall and resistant to being forgotten. Every night at 3 AM, the system goes through a "sleep cycle." Just like how your brain consolidates memories during sleep, the system strengthens connections between related memories, prunes the weak ones, and promotes the strong ones. This whole maintenance process runs on the cheapest model and costs less than a penny per night. ## The Compounding Effect Here's what makes this interesting beyond just saving money. The system gets cheaper over time. Week one, the library is empty. The memory is blank. Most questions have to escalate up the chain because the system hasn't built up knowledge yet. Maybe 60-70% of questions end up needing the attending or above. By month three, the library has hundreds of laminated cards. The memory has dozens of proven pathways. The triage nurse can now resolve 80% of questions by checking the card catalog and recalling past solutions. Not because the nurse got smarter, but because the knowledge base did. By month six, 95% of questions are handled at the front line. The system has learned your domain. Only brand new problems. Things it's truly never encountered before need to escalate to the specialist or subspecialist. It's like training a new resident. The first month, they're asking the attending about everything. Six months in, they're handling most cases independently and only calling up for the unusual ones. ## The Real Numbers I run about 50 questions a day through this system. Here's what it costs: The triage nurse handles 37-38 of those. Cost: less than a penny. The resident handles 7-8. Cost: less than half a penny. The attending handles 3. Cost: about a penny. The specialist handles 1-2. Cost: about two cents. The subspecialist handles maybe one every other day. Cost: about two cents. **Total: about six cents a day. Under two dollars a month.** Without this system, sending everything to the specialist: **$112 a month.** The overnight maintenance (the "sleep cycle" that prunes memories and builds the library) costs two cents a month. Total. ## Why This Matters Beyond My Desk This isn't just about my personal AI bill. The pattern applies anywhere people use AI models. If you're a developer running AI-powered features in an app, you're probably sending everything to one model. You're routing every question to the subspecialist when most of them could be handled at triage. If you're a company with a customer service bot, most questions are FAQs. Those should be handled at the appropriate level, with the more capable models reserved for the cases that actually need them. If you're a researcher running hundreds of queries against AI models, you're re-deriving the same knowledge over and over. A system that remembers and compounds would cut your costs dramatically. The core idea is simple. Match the level of capability to the complexity of the problem, remember what you've already figured out, and let go of what isn't useful. Hospitals figured this out decades ago with triage. Every clinician works at the top of their scope. Our brains figured it out millions of years ago with synaptic pruning. AI infrastructure is just catching up. ## Open Source I released this as an open-source project called the ConsultChain. It runs on a Raspberry Pi, integrates with OpenClaw (the AI assistant framework I use), and works with any combination of AI models from any provider. If you're technically inclined. It's a five-tier model cascade with progressive context distillation, a SQLite-backed knowledge store with phase-transition semantics, and a Hebbian memory system with scheduled pruning. It exposes an MCP server for tool integration. If you're not technically inclined. It's a system that makes AI cheaper by being smarter about who answers the question. https://github.com/sedusa/consultchain ### She Arrived Confused and Freezing. The Numbers Told a Darker Story Dec 5, 2025 https://samueledusa.com/post/diagnosis-confused-freezing _**Note:** Names and certain details in this story have been modified to protect patient privacy._ By the time the paramedics wheeled her through the double doors of the emergency department, nothing made sense anymore. Not her words. Not her eyes. Not the numbers flashing across the monitor. She was 57, small-framed, pale, with a knitted hat pulled too low over her forehead, as if someone had dressed her in a hurry. She blinked at the overhead lights and tried, unsuccessfully, to answer the doctor's question about what month it was. Her brother-in-law hovered beside her, shoulders hunched, voice low. "She's not like this," he kept saying. "She was fine two days ago." Her husband was out of state, reachable only by phone. He insisted she took her pills every day, that she went to every kidney transplant appointment, that her diabetes had "always been controlled." Recently, she'd started prednisone for a stubborn pain in her lower back. "Inflammation," he said. "The doctor said it would help." He didn't know that those pills, combined with her other medications, were quietly turning her body into a biochemical disaster. ![Illustration of a sick female with IV fluids and warming blanket](/images/cold-confused.jpeg "Cold and confused illustration") Samuel Edusa, MD. "An AI Generated Illustration of a Patient Arriving Confused and Freezing in the Emergency Department." 2025, Digital artwork generated using Google Gemini. Personal collection. ## A Body at the Edge of Collapse The woman shivered under a thin hospital blanket. Her temperature was 95.5°F. Too cold for a human body trying to fight infection. Her blood pressure was worse: 74/52. The monitor beeped its warning, as if embarrassed to show the numbers out loud. An IV pump growled to life. A nurse muttered: "She's dry. Really dry." A physician leaned over the lab report, then looked up, stunned. Her blood sugar wasn't just high. It was over 1,600 mg/dL. For most people, numbers above 600 trigger alarm. Above 1,000, the body begins to dismantle itself. She was nearly triple that. Her sodium was 111, so low the lab marked it with asterisks, but when corrected for sugar, it was normal. Her kidneys were shutting down. Her blood was acidic. She had markers of infection. Her white blood cells surged to 16,000, though no one knew if that was panic or pneumonia. "Hyperosmolar hyperglycemic state," a resident said. "With sepsis." Someone else corrected her tone, as if naming it too casually would diminish the gravity. HHS. A medical emergency. Mortality up to 20%. Her body was turning thick, syrupy. Water was fleeing her tissues to try to balance the tidal wave of sugar in her blood. The brain, desperate for fluid, slowed down. That was why she didn't know where she was. ## A Heart That Stopped Playing by the Rules Minutes later, her heart snapped into atrial fibrillation, an erratic rhythm that can dissolve into something much worse. Her blood pressure collapsed, briefly, before the rhythm corrected itself. "She self-converted," someone exhaled, grateful. For a moment, the room slowed. Machines hummed. Fluids poured into her veins like a river filling a cracked desert. Four liters. Then more. Her kidneys, transplanted nearly two decades ago, had been asked to do too much. The immunosuppressant tacrolimus that protected them had quietly sabotaged her pancreas, reducing its ability to make insulin. The steroids for her back pain heightened insulin resistance. And whatever infection was brewing (maybe pneumonia, maybe something else) poured gasoline on the fire. It was, quite literally, the perfect storm. Sepsis made her thirsty. Steroids made her resistant. Tacrolimus made her insufficient. The trio conspired until her blood became toxic. ## Fluid, Insulin, Antibiotics, Hope In the emergency department, they started broad antibiotics. First cefepime. Then, concerned about delirium, they switched to piperacillin-tazobactam and vancomycin. They threaded potassium into her veins. Watched her heart. Measured every drop of urine. They started insulin, but slowly. Too fast, and her brain could swell. She was not allowed to eat. She was barely allowed to speak. Her life, in those first hours, depended on math. ## The Family That Could Only Watch Her husband was on speakerphone, a thousand miles away, trapped in the helplessness of distance. "She was walking around the grocery store on Tuesday," he said. "She was laughing." He paused. "She gets tired sometimes. With the kidney transplant. But she's careful." There was a long silence, filled only by the pulse oximeter. "She didn't do anything wrong, did she?" he asked. No one wanted to answer that question. Medicine rarely punishes villains. More often, it punishes the vulnerable. ## A Slow Turn Toward the Living By morning, she was still confused, but less so. The glaze in her eyes loosened. She asked for water, repeatedly, unaware that drinking too fast could kill her. Her labs improved, slowly. Her kidneys began to wake. Her blood became less like syrup, more like blood. Her sodium crept upward. Her heart stayed in rhythm. The body, if given a chance, is astonishingly eager to survive. ## The Invisible Forces That Started It All Later, physicians pieced the story together. For years, she had lived a precarious balance: transplanted kidney, tacrolimus, diabetes, blood pressure pills, statins. Prednisone tipped her toward danger. Infection pushed her further. Tacrolimus sealed her fate. Not one factor, but all of them at once. "This happens," one doctor said quietly. "Sometimes the drugs that save you create the crisis that almost kills you." ## In the End, a Cautious Victory She would not leave the hospital quickly. She would need nephrology. Endocrinology. A slow reintroduction of food. And a plan for medications that could never be stopped, but now had to be handled like explosives. Before she left the ICU, a resident stood at the foot of her bed and told her, in gentle language, what almost happened. She was quiet. She stared at her IV pole. Then she said: "I don't remember any of it." Maybe that was mercy. ## The Thin Line Between Control and Collapse For healthy people, high blood sugar means lightheadedness, thirst, maybe fatigue. For her, it meant coma, seizures, death. Her crisis was not caused by her choices. Not by neglect. Not by indulgence. It was caused by a body full of medications, each necessary, each dangerous, stacked on top of infection, dehydration, and fragile metabolic wiring. The doctors called it HHS. A storm of sugar. A rare, deadly complication. She will call it "the night the world disappeared." And she is lucky, very lucky, to have woken up again at all.

--- _This case is part of a collection of cases I have seen during my internal medicine rotation, written in the style of The New York Times Diagnosis column, which I subscribe to and enjoy reading._ ### I Built a Simple Self-Service Lecture Scheduler for My Chief Year Apr 5, 2026 https://samueledusa.com/post/didactics-scheduler ![Didactics Scheduler](/images/scheduler.jpeg) I recently began my tenure as chief resident. This means that, among other things, I am responsible for coordinating a full year of subspecialty didactic lectures. That includes eighty four slots and dozens of speakers, all of which have historically been tracked through spreadsheets, email threads, and memory. I wanted something better. Something where a speaker could visit a link, see what dates are open, and book a slot themselves. No back-and-forth emails. No spreadsheet collisions. Real-time. So I built it. One HTML file. No framework. No build step. Deployed in under ten minutes. ## The Stack The whole thing runs on three services, all free tier. **Firebase Firestore** handles the data and real-time sync. When a speaker books a slot on their phone, every other browser looking at the page updates instantly. No polling. No refresh button. **EmailJS** sends me a notification every time someone books. I get the speaker name, their topic, and the date, straight to my inbox. **Firebase Hosting** (or Netlify, if you prefer dragging and dropping a folder) serves the single HTML file. That is it. No backend server. No database to manage. No dependencies to update six months from now when I am busy running a program. ## Why One File I know this sounds wrong. Twelve hundred lines of HTML, CSS, and JavaScript in a single file. But for a tool like this, it is the right call. There is no build process to break. There is nothing to install. If I need to hand this off to next year's chief, I send them one file and three API keys. They do not need to know what Node is. They do not need a package manager. The whole thing loads from CDN links for Firebase and EmailJS. The fonts come from Google. Everything else is inline. ## Setting It Up ### Firebase Create a project at console.firebase.google.com. Enable Firestore in production mode. Grab your config object from Project Settings and drop it in. ```js const FIREBASE_CONFIG = { apiKey: "your-api-key", authDomain: "your-project.firebaseapp.com", projectId: "your-project-id", storageBucket: "your-project.firebasestorage.app", messagingSenderId: "123456789", appId: "1:123456789:web:abc123", } ``` Then lock down the Firestore rules. Speakers can read all bookings and create new ones. Nobody can edit or delete through the client. ``` rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /bookings/{date} { allow read: if true; allow create: if true; allow update, delete: if false; } } } ``` Cancellations happen through the Firebase Console directly. That is intentional. I do not want speakers accidentally unbooking each other. ### EmailJS Create a free account. Connect your email service (Gmail, Outlook, whatever you use). Build a template with variables like `{{speaker_name}}`, `{{topic}}`, and `{{date}}`. Then plug in the three values. ```js const EMAILJS_CONFIG = { publicKey: "your-public-key", serviceId: "your-service-id", templateId: "your-template-id", } ``` ### The Slot Data Every available lecture date lives in a plain array. No database seeding. No migration scripts. Just an array of objects. ```js const ALL_SLOTS = [ { date: "2026-05-01", day: "Friday" }, { date: "2026-05-08", day: "Friday" }, { date: "2026-05-15", day: "Friday" }, // ... 84 total slots through June 2027 ] ``` Adding a slot means adding a line. Removing one means deleting a line. If the date is not in the array, it does not show up. Simple. ## The Booking Flow A speaker visits the page and sees every slot for the academic year, grouped by month. Green means open. Gray means taken. They click an open slot, fill in their name, email, and topic, confirm on a second screen, and they are done. Under the hood, the booking uses a Firestore transaction. This matters. If two speakers click the same slot at the same time, only one booking goes through. The other gets a polite error and picks a different date. No double bookings. No awkward emails. ## Deploying Two options, both take about five minutes. **Option 1: Firebase Hosting** ```bash npm install -g firebase-tools firebase login firebase init hosting firebase deploy --only hosting ``` **Option 2: Netlify Drop** Drag the folder containing `index.html` onto app.netlify.com/drop. You get a live URL immediately. I went with Firebase Hosting since I was already using Firestore. One fewer account to manage. ## What I Learned The hardest part of this project was not the code. It was defining the slots. I had to sit down with the academic calendar, cross-reference holidays, conference weeks, and rotation schedules, and manually build out 84 valid lecture dates. That took longer than writing the JavaScript. The code itself is straightforward. Firestore's `onSnapshot` listener handles real-time updates. The modal is plain DOM manipulation. The styling uses CSS custom properties so the SGMC brand colors are easy to change if the program moves institutions. I also added a dark mode and light mode toggle that respects the user's system preference on first load and remembers their choice after that. There is no login system. That was a deliberate choice. Speakers visit the link, book, and leave. Adding authentication would have added friction to a process I am trying to make frictionless. The Firestore rules prevent tampering, and I get an email for every booking. That is enough oversight for a residency lecture schedule. ## See It in Action ![Didactics Scheduler demo](/images/schedule-recording.gif) ## The Result I now have a single URL I can send to any subspecialist in the hospital. They see what is available, pick a date, and I get notified. The whole interaction takes about thirty seconds from their end. For a tool I will rely on every week for the next year, the simplicity is the feature. One file. Three API keys. No maintenance. If something breaks, I open one file and read it top to bottom. If you are a chief resident or program coordinator dealing with the same scheduling headache, the entire thing is a single HTML file you can fork and customize in an afternoon. ### Two Weeks in the Emergency Department Mar 20, 2025 https://samueledusa.com/post/emergency-medicine-experience _**Note:** Names and certain details in this story have been modified to protect patient privacy._ Each day in the emergency department starts with not knowing what's coming. During my recent two-week elective rotation as an internal medicine resident, the automatic doors would slide open and the day would begin. Every patient brought a different story. ![Emergency Department](/images/ed.jpg "Emergency Department") Samuel Edusa, MD. "An AI Generated Painting of a Patient in the ED." 2025, Digital artwork generated using Google Gemini. Personal collection. The ED is where clinical medicine and social reality crash into each other. A middle-aged woman arrived septic, her leg wound infested with maggots. She clutched a bag of cornbread, thick with the stench of fecal matter that had clearly not been cleaned for some time. Despite the EMT dispatch noting she lived with a husband and son, and that she had called EMS herself, the conditions suggested severe neglect. Her Class III obesity made self-care challenging, but the situation raised immediate questions about potential psychiatric components or family neglect. She lived in a basement apartment without running water, making proper wound care impossible. The disconnect between having family present and the extreme state of her condition was jarring, a reminder that social support networks can sometimes exist in name only. Then there was the gentleman convinced he had Creutzfeldt-Jakob Disease when presenting with chest pain. His internet research had led him down a rabbit hole of rare diseases, while his actual hypertension and hyperlipidemia remained untreated for years due to lack of insurance. Surprisingly, his ECG didn't show any concerning changes, but a review of his chart revealed multiple visits for similar presentations. As a veteran, could his PTSD and military experiences be contributing to these somatic symptoms? His chart had a previous diagnosis of conversion disorder, a psychiatric component that complicated his care and reminded me how physical symptoms often intertwine with mental health needs, especially in those who've served. An elderly man returned with his third CHF exacerbation in two months. "I couldn't pick up the medications," he explained with downcast eyes. The pharmacy was three bus transfers away, and his monthly social security check hadn't stretched far enough to cover both the co-pay and his rent. I sutured a retired surgeon who had slashed his head when a branch fell on him while gardening. He joked and offered technique suggestions as I worked, a reminder of the continuity of our profession. His case was straightforward. He had resources, follow-up care, and a support system at home. A young woman was brought in after overdosing on THC gummies. Through her hazy state, she revealed she'd been self-medicating for PTSD after experiencing sexual assault. She'd never been able to afford mental health treatment, despite working two jobs. Late one night, we treated an inmate with multiple stab wounds requiring complex suturing. As I worked, I wondered about the circumstances that had led him to incarceration, and what healthcare he'd receive after returning to the correctional facility. An elderly woman arrived by ambulance, severely dehydrated and confused. Her caregiver daughter explained through tears that she'd been juggling three jobs to make ends meet and couldn't afford professional help. The guilt on her face was familiar. I've seen it in parents of sick children, in adult children caring for aging parents, in anyone trying their best against impossible odds. A young man presented with diabetic ketoacidosis, his blood glucose over 600. He'd been rationing insulin, taking half doses to stretch his supply until payday. "I know better," he said, "but I had to pay rent or buy insulin. I couldn't do both." Between the clinical patterns, each patient had their own set of impossible circumstances. I kept thinking about my time practicing in Ghana, where limited resources were just the reality. What caught me off guard in this American ED was seeing the same kind of poverty in a country that's supposed to have opportunities for everyone. The barriers weren't just medical. They were financial, logistical, educational, and systemic. Every delay in seeking treatment had turned a manageable condition into an emergency. Every discharge that didn't address the underlying social issues risked a readmission. We were good at treating what was in front of us, but often had no way to change the circumstances that would send these patients right back through those doors. When discharging patients, I began asking different questions. Not just "Do you understand your medication instructions?" but "Do you have a way to get these medications?" Not just "Follow up with your primary care doctor," but "Do you have a primary care doctor? Do you have a way to get to appointments?" The days were busy and each one was hard in its own way. Knowing that you're discharging someone back into the same situation that brought them in is a difficult part of the job. Sometimes unavoidable, but never easy. I keep coming back to these experiences because they changed how I think about medicine. Without reflecting on them, two weeks in the ED is just a series of interesting cases. With reflection, it becomes something that actually makes you a better doctor. As I return to inpatient medicine, I'm carrying these patients with me. Medical care doesn't happen in isolation. It's delivered inside social systems that either help or undermine what we're trying to do. Recognizing that is the starting point for actually helping. ### The Human Doctor June 20, 2025 https://samueledusa.com/post/empathy _**Disclaimer:** Some details have been altered or generalized to protect patient privacy and maintain HIPAA compliance._ I met him on my inpatient rotation. An elderly veteran with hands that looked like they'd spent decades working. His wife called him her "stubborn old mule," though you could tell she meant it with love. He had come in for what seemed like a straightforward nosebleed, but it didn't stay straightforward for long. The bleeding wouldn't stop. Lab results showed thrombocytopenia, dangerously low platelets, likely immune thrombocytopenia. His body was attacking itself. We transfused platelets, watched the numbers barely move, transfused again. His baseline dementia, which had already been quietly stealing his memories, got worse under the stress of being in the hospital. Delirium set in, and suddenly everything was strange and frightening for him. ![Holding hands](/images/goodbye.jpg "Empathy") Samuel Edusa, MD. "An AI Generated Sketch Of A Woman Holding The Hand Of Her Husband" 2025, Digital artwork generated using the Flux Kontext Pro model. Personal collection. His wife never left his side. She was small, only a few years younger than him, dealing with her own health problems. But she stayed, holding his hand through the confusion, whispering to him when he no longer knew where he was. The decision to transition to comfort care didn't come easily. We discussed it in pre-rounds with the usual clinical precision. But at some point, this stopped being about medicine. It was about a family saying goodbye. That's when I realized how much those extra few minutes matter. I could have rushed through the conversation with his wife, delivered the medical facts, and moved on to the next patient. The EHR was waiting, progress notes needed updating, and the productivity clock was ticking. But something made me pause, pull up a chair, and sit with her. We talked about her husband. Not the patient in room 2301, but the man who had worked until the very end, who had lived what she called "a full life." She told me how he still tried to fix things around the house even when his hands shook. How his stubborn insistence on independence frustrated and endeared her at the same time. "He wouldn't want this," she said quietly, watching him struggle against the confusion. "He always said he wanted to go with dignity." I understood something in that moment that no textbook had taught me. Empathy isn't optional in medicine. It's medicine. I've been thinking about this especially since a JAMA Internal Medicine study found that ChatGPT responses were rated higher in both quality and empathy than physician responses, with empathetic ratings 9.8 times higher for AI than for doctors [1]. The AI responses were longer, more detailed, and perceived as more caring. That stings, but it makes sense. We're operating under constant time pressure. Packed schedules, overflowing inboxes, administrative burden. ChatGPT doesn't have any of that. It can take as long as it wants to craft a thoughtful response [1]. We sometimes get three minutes. But here's what keeps me grounded: AI can't sit in a hospital chair at 2 AM holding the hand of a frightened spouse. It can't read the grief in a daughter's eyes or know when touch matters more than words. It doesn't carry its own understanding of loss and mortality into those moments. That evening, as I finished my documentation, I stopped by his room one more time. His wife was still there, reading to him from a book of poems. He had grown peaceful in the dim light. The agitation from earlier in the day had settled. "Thank you," she said. Not for anything medical we had done, but for seeing them as people. He passed quietly the next morning, surrounded by family. The nurses told me his wife held his hand until the very end. I've been turning this over in my head since. What does it mean to "practice" medicine? We practice the science, obviously: diagnosis, treatment protocols, evidence-based interventions. But we also practice being human in the face of suffering. We practice showing up when cures aren't possible. AI might write more empathetic-sounding text. But empathy in medicine is more than words on a screen. It's being willing to sit with someone's fear and pain when you could easily walk to the next room. His wife sent a card to our unit a few weeks later. "Thank you for taking care of my husband," she wrote, "but more than that, thank you for taking care of us." Those words have stayed with me. In a system that tracks RVUs and door-to-discharge times, it's easy to forget that what patients remember most is whether you were actually present with them. The extra few minutes matter. Sitting down instead of standing. Asking the question you don't technically need to ask. Listening to the answer even when it doesn't change the treatment plan. That's the part of doctoring that no algorithm can replicate. And I think it's the part our patients need most.

Reference


[1] Ayers JW, Poliak A, Dredze M, et al. Comparing Physician and Artificial Intelligence Chatbot Responses to Patient Questions Posted to a Public Social Media Forum. JAMA Intern Med. 2023;183(6):589-596. doi:10.1001/jamainternmed.2023.1838. ### A Reflection on Service and Responsibility July 3, 2025 https://samueledusa.com/post/hope-healing-human-kindness I wasn't expecting to see my own face on the elevator doors at SGMC Health. But there I was, white coat and stethoscope, next to the hospital's message: "Hope. Healing. Human Kindness." ![image on door](../images/image-on-door.jpg) ## A Moment of Reflection I stood there for a second and just stared. It's a strange thing, seeing yourself used to represent something bigger than yourself. My path to this point wasn't straightforward. Medical school, residency, the early days when I second-guessed every clinical decision. And now my photo is on the elevator. It was humbling, honestly. Not in the way people say "humbling" when they actually mean they're proud. I mean it caught me off guard and made me think about what those words, "Hope. Healing. Human Kindness," actually mean in practice. Not as a slogan, but as something you try to do every day on rounds. ## What It Reminded Me Of Seeing my image there reminded me that patients and families see us before we say a word. We walk into rooms carrying whatever they project onto a white coat: hope, fear, trust, skepticism. That's a weight. We're not just managing diagnoses. We're the person standing in front of a family during some of the hardest days of their lives. That photo on the elevator isn't really about me. It's about every resident and attending and nurse who shows up and tries to do this work well. ## Gratitude I'm grateful for the residency program here at SGMC Health. The attendings who taught me, the colleagues who pushed me, the patients who trusted me when I was still figuring things out. This place shaped how I practice. Seeing my photo on that elevator was a quiet reminder: the work matters, and the people around me are the reason I'm able to do it. ### How I built this website Apr 9, 2022 https://samueledusa.com/post/how-i-built-this I spent a lot of time researching the best combination of complementary frameworks to build this website, and eventually settled on using NextJS to build it, hosting it in a private Bitbucket repository, and deploying it with Netlify. These are the steps you can take to deploy a similar project. ## Prerequisites 1. Node.js (>= 12.0.0) 2. Yarn or npm 3. Git 4. Bitbucket account 5. Netlify account ## Step 1: Create a Next.js Project You can find the official docs on how to create a next-js app here. First, let's create a new Next.js project using the following command: ~~~js npx create-next-app my-nextjs-project cd my-nextjs-project ~~~ Replace "my-nextjs-project" with your desired project name. ## Step 2: Add Typescript to the project Next, let's add TypeScript to the project: ~~~js yarn add --dev typescript @types/react @types/node ~~~ or ~~~js npm install --save-dev typescript @types/react @types/node ~~~ Create a `tsconfig.json` file in the project root with the following contents: ~~~js { "compilerOptions": { "target": "esnext", "module": "esnext", "jsx": "preserve", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] } ~~~ Rename `.js` files to `.tsx` or `.ts`, and update the import statements accordingly. ## Step 3: Add Styled Components Install Styled Components and its TypeScript definitions: ~~~js yarn add styled-components @types/styled-components ~~~ or ~~~js npm install styled-components @types/styled-components ~~~ ## Step 4: Push to a Private Bitbucket Repository Create a new private repository on Bitbucket. In your local project, initialize a Git repository and push to Bitbucket: ~~~js git init git add . git commit -m "Initial commit" git remote add origin YOUR_BITBUCKET_REPOSITORY_URL git push -u origin master ~~~ Replace `YOUR_BITBUCKET_REPOSITORY_URL` with your Bitbucket repository's URL. ## Step 5: Deploy to Netlify Log in to your Netlify account and create a new site from Git. Choose Bitbucket as the Git provider and authorize access to your private repository. Configure the build settings as follows: - Build command: `yarn build` or `npm run build` - Publish directory: `out` Click **Deploy Site** to deploy your project. ## That's it You've got a Next.js project with TypeScript and Styled Components, stored in a private Bitbucket repository, deployed to Netlify. ![Noice](https://media.giphy.com/media/Od0QRnzwRBYmDU3eEO/giphy.gif) ### Surviving Helene Sept 27, 2024 https://samueledusa.com/post/hurricane-helene ![Outside the shelter](/images/outside-church.jpeg "Outside the shelter at Park Avenue Church") Outside the Shelter at Park Avenue Church Before the Storm Hit While Hurricane Helene tore through South Georgia, I was inside a church that had been converted into a shelter. I was there as a resident physician, volunteering alongside Red Cross staff. SGMC Health had set up the shelter to support patients who needed oxygen. Among them were Ron, a young man with autism, and his mother. She kept explaining why they'd come, almost apologizing for being there. It was hard to watch. During a hurricane, nobody should have to justify needing shelter. The people inside that church were all different from each other, thrown together by the storm. A thirty-something-year-old mother sat with her dozen kids, all of them well-behaved. A former hospital employee started organizing things without anyone asking her to, keeping people calm in a way that made a real difference. ![Inside the shelter](/images/inside-church.jpeg "People inside the shelter") People sheltering in place inside the church An anxious woman came up to me, scared about the Category 4 warnings. I tried to reassure her, though I wasn't entirely sure what Helene would bring either. Nearby, a tattooed woman in her thirties held her oxygen-dependent infant. She told me she was a recovering addict, staying clean for her baby. I didn't know what to say to that. She was doing something harder than most people will ever understand. As it got dark, more people arrived. An elderly woman watched over her two grown autistic sons, who slept on the floor, completely trusting that she'd keep them safe. A Hispanic family set up in a corner and started playing board games, laughing while the wind shook the building. That laughter stood out. The hours kept passing. A man slept while his wife sat upright next to him, watching. An elderly woman cornered me to go through her full medical history. A man with intellectual disabilities set up his TV in the bathroom, trying to make things feel normal. A homeless man asked quietly if there was a hot meal. It was a long night. Everyone was scared, but people kept looking out for each other. Strangers sharing blankets, checking on each other's kids, making small talk that meant more than it normally would. When morning came and the wind died down, we all started packing up and going our separate ways. But that night stuck with me. Put a room full of strangers together during something terrifying, and people mostly look out for each other. That's worth remembering.

To prepare for Hurricane Helene, SGMC Health established a shelter at a local church in Valdosta, Georgia, specifically for people who require oxygen as well as other vulnerable populations. Two resident physicians, Drs. Edusa and Joseph, volunteered to assist with the shelter's operations.

Note: All names in this article were replaced with pseudonyms to protect individuals' privacy.

### Monkeypox Jun 3, 2022 https://samueledusa.com/post/monkey-pox Monkeypox has been in the news a lot recently. The virus has been present in Central and West Africa since the early 1970s, but in May 2022 it started spreading beyond that region. As of May 26, 2022, over 300 cases have been confirmed across 20 non-African countries and six US states. The situation is changing quickly. ### Background Monkeypox is an orthopoxvirus that looks clinically similar to smallpox. It was first identified in monkeys in 1958, and the first human outbreak occurred in the Democratic Republic of Congo (DRC) in the early 1970s. ![Monkeypox virus](/images/monkey-pox-virus.jpg "Monkeypox virus") (Image from the CDC Cynthia S Goldsmith, Russell Regnery. [Public domain]) The electron microscope image above shows monkeypox virion recovered from a human skin sample during the 2003 US epidemic. Mature, oval-shaped viral particles are on the left; immature, spherical particles are on the right. ### Transmission Monkeypox is zoonotic, meaning it spreads from animals to humans, usually through contact with or consumption of small animals, especially rodents. During the 2003 US outbreak, several dozen cases were traced back to pet prairie dogs and, ultimately, rats imported from Ghana. Human-to-human transmission occurs through damaged skin, respiratory droplets, or mucous membrane contact. Indirect transmission through contaminated clothing or linens is also possible. Several cases in the 2022 outbreak have been in men who have sex with men, which has raised questions about specific transmission pathways. However, the virus still spreads primarily through bodily fluids, respiratory droplets, and direct contact with lesions. ### Signs and symptoms Early signs include fever and lymphadenopathy (swollen lymph nodes), often accompanied by headache, muscle pain, chills, fatigue, and cough. The lymphadenopathy, particularly in the submental, submandibular, cervical, and inguinal nodes, is the most reliable feature that distinguishes monkeypox from smallpox and chickenpox. ![Monkeypox virus](/images/monkey-pox-pustules-face.jpg "Pustules on face") Caucasian male with monkey pox pustules on his face (Source: nairobitimes.co.ke) Incubation takes 7-14 days (range: 5-21 days). The rash appears 1-3 days after fever onset, typically starting on the face and mouth before spreading to the rest of the body, including palms and soles. It looks like chickenpox. Lesions progress through macular, papular, vesicular, and pustular stages before resolving. The illness lasts 2-4 weeks, with ulcerative lesions in some cases. ### Evaluation Use droplet precautions when examining a suspected case: N95 mask, gown, gloves, and eye protection. Get a thorough travel and exposure history. Track all clinical staff who had contact with the patient. Disinfect room surfaces after the patient leaves. ![Clinicians wearing personal protective equipment](/images/monkey-pox-ppe.jpg "Clinicians wearing personal protective equipment") Image of clinicians wearing personal protective equipment (PPE) from Wikimedia Commons | Javed Anees, District Hospital, Tirur. Collect viral cultures via oropharyngeal or nasopharyngeal swab. Skin biopsy of a vesiculopustular lesion or fluid from an intact vesiculopustule should also be examined. Confirmation can be done with PCR, electron microscopy (if other orthopoxviruses are excluded), or immunohistochemistry. A Tzanck smear can help rule out nonviral causes in the differential, but it can't distinguish monkeypox from smallpox or herpes. ![Pustules on hand](/images/monkey-pox-pustules-hand.jpg "Pustules on the hand") Image courtesy of Medscape. The dorsum of a patient's hand has a monkeypox vesiculopustular rash. Some lesions have a central umbilication. ### Treatment Treatment is mostly supportive and symptomatic. Isolate the patient and use appropriate precautions. The patient remains infectious until all scabs have dried and fallen off. Vaccines are available, and post-exposure vaccination after high-risk contact has been shown to prevent or reduce severity of illness. ### Mortality and complications Mortality rates in Africa range from 1.0% to 10.6%, with immunocompromised and malnourished patients at highest risk. Secondary bacterial infections can develop from the skin lesions. ### Contributing to the Pancreas Digital Open Source Insulin Bolus Calculator Sept 17, 2022 https://samueledusa.com/post/pancreas-digital At this year's Cognizant Softvision Programmers' Week conference, I watched a presentation from an Argentine software engineer who had built a project to calculate insulin dosage for his son, recently diagnosed with Type 1 Diabetes mellitus (T1DM). It caught my attention immediately. ### About the Pancreas Digital Pancreas Digital is a non-profit organization based in Buenos Aires, Argentina, that focuses on diabetes technology, manages an open-source insulin bolus calculator, and plans online workshops hosted on YouTube. ### About the Open Source Insulin Bolus Calculator The Pancreas Digital Insulin Bolus Calculator uses a standard formula that matches the meal insulin to the patient's carbohydrate intake (carbohydrate counting). A deployed version (online version) of this calculator can be found here. ### My first contribution My first contribution was to implement Internationalization (i18n) in the project (i.e. adding support for local languages and cultural settings) in order to allow for more broader personal use. You can check out my pull request (PR) here. #### Tasks completed - Added i18n which is supported out-of-the-box by Next.js. - Added support for the english language `en-US`. - Translated the Disclaimer text (which runs when the app is first run).FNext - Translated the labels & input fields on the calculator page. ![Bolus calculator (Spanish)](/images/pancreas-digital-es.jpg "Bolus Calculator - Spanish") Spanish version of the Pancreas Digital Insulin Bolus Calculator ![Bolus calculator (English)](/images/pancreas-digital-en.jpg "Bolus Calculator - English") Translated version of the Pancreas Digital Insulin Bolus Calculator - Changes made to `next.config.js` file to enable the out-of-the-box `i18n` support in Next.js ~~~js const { PHASE_DEVELOPMENT_SERVER } = require('next/constants'); module.exports = (phase) => { return { env: { siteUrl: phase === PHASE_DEVELOPMENT_SERVER ? 'http://localhost:3000' : 'https://pancreas.digital', siteTitle: 'Pancreas Digital - Calculadora de bolos', siteDescription: 'Calculadora de bolos de insulina para el control de la diabetes.', siteLogo: 'Vertical.jpg', siteName: 'Pancreas Digital', twitterCard: 'summary_large_image', twitterImageAlt: 'Pancreas Digital Logo', twitterSite: '@fedemotta_', }, reactStrictMode: true, i18n: { locales: ['es-AR', 'en-US'], localeDetection: true, defaultLocale: 'es-AR', }, }; }; ~~~ - All the other code changes can be found in the Pull Request (PR) Feature/6 Implement i18n in the insulin bolus calculator #7. ### Future contributions - Improving input field validations. - Investigating further the effect of dietary fat and protein on the rise in basal glucose levels, as well as the possibility of enhancing the algorithm for insulin bolus calculation to include all three variables (carbohydrate, fat and protein). - Translating the application into other languages, e.g. French, German, Ukrainian, Swahili, etc. - Nightscout integration. Nightscout is an open-source cloud application used by people with diabetes and parents of kids with diabetes to visualize, store and share the data from their Continuous Glucose Monitoring (CGM) sensors in real-time. ### References 1. Schmidt, S., & Nørgaard, K. (2014). Bolus Calculators. Journal of Diabetes Science and Technology, 8(5), 1035–1041. (View paper) 2. Pesl, P., Herrero, P., Reddy, et al. (2016). An Advanced Bolus Calculator for Type 1 Diabetes: System Architecture and Usability Results. IEEE Journal of Biomedical and Health Informatics, 20(1), 11–17. (View paper) ### Building a Paste App Oct 20, 2024 https://samueledusa.com/post/paste-app I kept running into the same problem: I needed to get a code snippet, URL, or quick note from my computer to my phone, and the usual methods were annoying. So I built a small paste app that sends text from a website straight to my phone via Telegram. Here's how I put it together. ## The concept Simple: a web page where I type a title and message, hit send, and it shows up on my phone via Telegram. Telegram has a solid bot API, so I used that as the delivery mechanism. flow A sketch of the application flow ## Tech stack - **React** for the UI - **styled-components** for styling - **Telegram Bot API** for message delivery ## Key Components ### 1. User Interface The UI consists of a sticky note-like component with two main input fields: - A title input (`NoteInput`) - A message textarea (`NoteTextarea`) I used styled-components to create a visually appealing and responsive design that works well on both desktop and mobile devices. ui User interface for the paste app ### 2. State Management I utilized React's `useState` hook to manage the state of the title and message inputs: ```javascript const [title, setTitle] = useState(''); const [message, setMessage] = useState(''); ``` ### 3. Date and Time Display To add context to each paste, I implemented a real-time date and time display using the `useEffect` hook: ```javascript useEffect(() => { const updateDateTime = () => { const now = new Date(); setCurrentDateTime(now.toLocaleString()); }; updateDateTime(); const timer = setInterval(updateDateTime, 1000); return () => clearInterval(timer); }, []); ``` ### 4. Sending Messages to Telegram The core functionality is implemented in the `sendToTelegram` function. This function: 1. Cleans and escapes the input text to prevent XSS attacks 2. Formats the message with HTML tags for better readability 3. Sends a POST request to the Telegram Bot API.
NOTE: Avoid exposing sensitive credentials (token and chat_id) in client-side code. Instead of making direct API calls to Telegram from the frontend, implement a secure middleware layer - either a proxy server or backend API - to handle authentication and protect your secrets. In this implementation, I used Netlify Functions as a serverless solution to securely manage API calls. ### `sendToTelegram` (front end code) ```javascript const sendToTelegram = () => { // Clean and escape the title and message const cleanedTitle = cleanText(title); const cleanedMessage = cleanText(message); const escapedTitle = escapeHtml(cleanedTitle); const escapedMessage = escapeHtml(cleanedMessage); fetch('/.netlify/functions/send-telegram', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ title: escapedTitle, message: escapedMessage, dateTime: currentDateTime, }), }) .then((response) => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then((data) => { if (data.success) { setTitle(''); setMessage(''); alert('Message sent successfully!'); } else { throw new Error(data.error || 'Unknown error occurred'); } }) .catch((error) => { console.error('Error sending message:', error); alert(`Error sending message: ${error.message}`); }); }; ``` ### `send-telegram` (serverless function) ```javascript const axios = require('axios'); exports.handler = async function(event, context) { if (event.httpMethod !== 'POST') { return { statusCode: 405, body: 'Method Not Allowed' }; } const { title, message, dateTime } = JSON.parse(event.body); const telegram_bot_token = process.env.TELEGRAM_BOT_TOKEN; const telegram_chat_id = process.env.TELEGRAM_CHAT_ID; if (!telegram_bot_token || !telegram_chat_id) { return { statusCode: 500, body: JSON.stringify({ error: 'Missing Telegram configuration' }) }; } const telegram_message = `${title}\n\n
${message}
\n\n${dateTime}`; try { const response = await axios.post(`https://api.telegram.org/bot${telegram_bot_token}/sendMessage`, { chat_id: telegram_chat_id, text: telegram_message, parse_mode: 'HTML' }); if (response.data.ok) { return { statusCode: 200, body: JSON.stringify({ success: true }) }; } else { throw new Error(response.data.description || 'Unknown error occurred'); } } catch (error) { console.error('Error sending message:', error); return { statusCode: 500, body: JSON.stringify({ error: `Error sending message: ${error.message}` }) }; } }; ``` ### Screenshot of message being sent to Telegram chat proof Note sent to private Telegram chat with message body formatted to allow easier copying of code snippets ### 5. Security Considerations For security, I added two helper functions: - `cleanText`: Removes non-printable characters (except newlines and spaces) and trims the input - `escapeHtml`: Escapes special HTML characters to prevent XSS attacks ## What's next The app works well for my daily needs. If I come back to it, I'd probably add: - Authentication so it's not just secured by obscurity - A history view for past pastes - File upload support ### Building a Post-Paracentesis Albumin Calculator June 18, 2026 https://samueledusa.com/post/post-paracentesis-albumin-calculator You just finished a large-volume paracentesis. Eight liters off a patient with tense ascites, they can breathe again, and now you owe them albumin. So you open the order in Epic. That is where it slows down. You have to remember the dose is about 8 grams per liter removed. You do the multiplication in your head, then remember albumin comes in 25 gram bottles, so you round to something the pharmacy can actually dispense. Then the order opens, and it's a wall of fields: a frequency dropdown with dozens of options, a duration, a rate, a priority, a phase of care, an exception code you've never touched. Most of them you leave alone, but you still have to read each one to know that. I've watched a lot of residents do this. They hesitate in the same three places every time: the dose, the bottle rounding, and the frequency. None of it is hard. It's just fiddly, and fiddly at the bedside is where mistakes live. So I built a calculator. You enter the liters removed, and it gives you the dose, rounds it to whole bottles, and fills in every field of the Epic order. Then you copy the whole thing. It's live at albumincalculator.netlify.app. ## The problem Epic order set for albumin after a large-volume paracentesis The Epic order set for albumin — a dozen fields for a single one-time dose. Albumin after paracentesis is one of those orders that's simple in concept and annoying in practice. The clinical decision is small: how many grams, given once. But Epic doesn't ask you for grams. It asks for a dose, a route, a frequency, a start time, an administration duration, a rate, admin instructions, a note to pharmacy, a priority, an exception code, a supply, and a phase of care. For a one-time albumin infusion, almost every one of those has an obvious answer. Frequency is Once. Route is intravenous. But it's only obvious after you've done it fifty times. A resident seeing the order for the first time has to figure out which of the many frequency options means "just give it one time," and whether the rate they typed actually matches the volume and the duration. That part is confusing, and it has nothing to do with medicine. ## What I built The tool runs in three steps, top to bottom. You pick the product and enter the liters removed. It shows you the recommended dose and whether albumin is even indicated. Then it builds the full Epic order underneath, with one button to copy it. Nothing about it is clever. It just holds all the small decisions in one place so you don't carry them in your head while you're standing at the bedside. Using the post-paracentesis albumin calculator Enter the liters removed; the dose, bottle count, and full Epic order build underneath. ## How the dose is calculated Most guidelines land on 6 to 8 grams of albumin for every liter of ascites removed. The calculator uses 8 grams per liter. That's the top of the range, and it's what the FDA label for 25 percent albumin specifies (8 grams per 1,000 mL removed), which is also what our Epic order set assumes. Picking one number and matching the order set keeps it predictable. From there it's two steps: 1. **Multiply.** Liters removed times 8 gives the raw target in grams. 2. **Round to a bottle.** Albumin is dispensed in 25 gram bottles, so the raw number rounds to the nearest whole 25 grams, and never below one bottle. Say you removed 8 liters: - 8 L × 8 g/L = 64 g - 64 g rounds to 75 g, which is three 25 gram bottles - 75 g of 25 percent albumin is 300 mL So the order is 75 grams, given once, and the pharmacy sends up three bottles. The calculator shows the raw number and the rounded number side by side, and tells you whether what you entered comes in under, over, or on target. The rounding is never a black box. ## When albumin is actually indicated This is the part I most wanted guardrails around, because the dose doesn't matter if albumin wasn't indicated in the first place. - **More than 5 liters removed:** give albumin. This is the classic large-volume paracentesis threshold. - **5 liters or less:** usually not required. The tool says so instead of just handing you a dose. - **Acute on chronic liver failure (ACLF):** give albumin regardless of volume, even for a small tap. There's a checkbox for it, and it overrides the 5 liter rule. - **More than 8 liters in one session:** the dose still calculates, but the tool flags it, because the risk of post-paracentesis circulatory dysfunction climbs once you're pulling that much in a single sitting. So it isn't just a multiplier. It tells you when not to give the drug, which is the more useful thing for someone still learning the indication. ## Volume, rate, and duration Once you have the grams, the order needs a volume and a rate, and those depend on the product. A 25 gram bottle of 25 percent albumin is 100 mL. A 25 gram bottle of 5 percent albumin is 500 mL. Same grams, five times the volume. For large-volume paracentesis you almost always want the 25 percent, because it delivers the replacement in a fraction of the fluid. The calculator defaults to it for that reason, with 5 percent there if you need it. Rate, duration, and volume are linked by one equation: ``` rate = volume ÷ duration ``` Set any one and the calculator fills in the other. Give that 300 mL a two hour duration and it returns 150 mL/hr. Type a rate instead and it solves for the duration. You're never doing that division yourself. ## The Epic order it builds Everything above feeds a complete order at the bottom of the page: medication, total dose, calculated volume, bottles dispensed, route, frequency, start date and time, duration, rate, admin instructions, note to pharmacy, priority, exception code, supply, and phase of care. Frequency is preset to Once, because albumin after paracentesis is a single replacement dose, not something you schedule. There's one button: **Copy full order.** It puts the whole thing on your clipboard as formatted plain text, so you can paste it wherever you need it and check it field by field against Epic. The goal isn't to bypass the order. It's to walk in already knowing every answer. ## How it's built If you came here for the code, this part is almost boring, and that's on purpose. It's a single HTML file. The markup and the calculator logic live together, plain vanilla JavaScript, no framework. Styling is Tailwind CSS v4 compiled with the Tailwind CLI. It deploys as a static site on Netlify. That's the whole stack. A few things I did bother to get right: - It's a progressive web app. There's a service worker and a manifest, so you can add it to your phone's home screen and it works offline. On a floor with bad signal, that matters. - It has light and dark mode, follows your system theme, and remembers what you picked. - The inputs use 16 pixel text so iOS Safari doesn't zoom in every time you tap a field. Small thing, deeply annoying when it's wrong. - The link previews are set up properly, so dropping the URL in a text or a Slack message shows a real card instead of a bare link. I keep these tools in one file on purpose. If something breaks, I open one file and read it top to bottom. No build server to babysit, nothing to install before I can fix a typo. For a tool I want a busy resident to trust, simple is the feature. ## Why it helps The math isn't the hard part. Anyone can multiply by eight. The friction is everything around the math: the rounding to bottles, the volume that changes with the product, the rate that has to match the duration, and an order set with dozens of frequencies. Spread that across a busy day and it's exactly where someone enters a rate that doesn't match the volume, or doses a 4 liter tap that never needed albumin. Holding all of it in one place does two things. It makes the common case fast, and it makes the wrong case visible. You still decide. If the patient doesn't fit the rule, the tool tells you, and you use your judgment anyway. ## Try it The calculator is at albumincalculator.netlify.app. It's free, it works on a phone, and it doesn't need a login. If you take care of patients with ascites and you'd rather not do this math at the bedside, use it. If you find an edge case it handles badly, tell me.

## Dosing logic and sources - Albumin is recommended when more than 5 L of ascites is removed. For 5 L or less it's generally not required unless the patient has ACLF. - The dose is 6 to 8 g per liter removed. This tool uses 8 g/L, matching the FDA label for 25 percent albumin (8 g per 1,000 mL) and our Epic order set, rounded to whole 25 g bottles. - A 25 g bottle of 25 percent albumin is 100 mL; a 25 g bottle of 5 percent is 500 mL. Rate equals volume divided by duration. - The risk of post-paracentesis circulatory dysfunction rises above 8 L removed in a single session. **References** - Biggins SW, et al. AASLD 2021 Practice Guidance on the management of ascites. *Hepatology.* 2021. - Garcia-Tsao G, et al. AGA Clinical Practice Update on the management of ascites. *Gastroenterology.* 2024. - Ge PS, Runyon BA. Treatment of patients with cirrhosis. *N Engl J Med.* 2016. - FDA. Albuminex (albumin human) prescribing information. 2024. ## Clinical disclaimer This is a clinical decision support tool for licensed clinicians. Check every dose, rate, and duration against your institutional protocol and the patient's clinical context before ordering. It does not replace clinical judgment. ### The Importance of Primary Care Sept 14, 2022 https://samueledusa.com/post/primary-care ![Ampain Refugee Camp](/images/ampain.jpg "Ampain Refugee Camp") (At the Ampain Refugee camp in the Western Region of Ghana) I worked as a doctor in Ghana for over a decade, and that experience shaped how I think about primary care. In a country where specialist access is limited, primary care is often the only care a patient gets. ## Why primary care matters Primary care is where most people first interact with the healthcare system. A general practitioner or family medicine doctor handles a wide range of problems and refers to specialists when needed. In many settings, especially in countries like Ghana, this is the entire healthcare system for most patients. When primary care works well, it keeps people out of hospitals. Problems get caught early, chronic conditions get managed, and patients have somewhere to go before things get bad. Regular check-ups and screenings catch issues before they become emergencies. There's also a social side to it. Primary care doctors often end up connecting patients with social services, community resources, and support systems that address non-medical factors affecting their health. In Ghana, I saw this constantly. ## Working in Ghana What struck me most about practicing in Ghana was how much the doctor-patient relationship mattered. Many of my patients had limited access to healthcare and relied on me for everything. Building trust was essential. If a patient doesn't trust you, they won't tell you what's actually going on. I tried to take time with each patient, listening to their concerns and explaining their conditions. Most people were eager to learn. When I explained how to manage hypertension or why handwashing prevents infection, they took it seriously. That education often did more than the medications I prescribed. Beyond clinic work, I got involved in public health: vaccination campaigns, infectious disease education, nutrition programs. These efforts complemented what we were doing in the exam room. The biggest challenge was resources. Limited equipment, limited medications, limited access to imaging and lab work. You learn to do a lot with a little, but it's frustrating knowing you could do more with better tools. Despite all of that, the work was deeply satisfying. I saw patients get better, communities get healthier, and people take ownership of their wellbeing because someone took the time to explain things to them. ### Why I learned R (and why you might want to) Dec 24, 2022 https://samueledusa.com/post/r-programming ![R Programming Language](/images/r-header.jpg "R Programming Language") (Source: Thinkstock) I picked up R because I needed better tools for working with data. As a software engineer, I'd been doing data analysis in other languages, but R kept coming up in conversations with researchers and data scientists. So I finally gave it a shot. What sold me was how straightforward it is for data exploration and visualization. The package ecosystem (ggplot2, dplyr, tidyr) makes it easy to go from raw data to a clean chart in a few lines of code. I spend a lot of time exploring and manipulating datasets, and R just handles that well. R is also the go-to language for statistical analysis. If you need to run regressions, ANOVA, or hypothesis tests, the tools are already there. I didn't have to build anything from scratch or hunt for third-party libraries. The other thing I noticed is that R shows up everywhere in academia and industry. Learning it opened up collaboration opportunities with people I wouldn't have been able to work with otherwise. And because R is built around reproducible research, sharing your data, code, and results with collaborators is built into the workflow. ### Why you might want to learn R: 1. **Data analysis and visualization**: The package ecosystem for importing, cleaning, and visualizing data is mature and well-maintained. If you work with data regularly, R makes a lot of tasks easier. 2. **Statistical analysis**: Regression, ANOVA, hypothesis testing, and more are all available out of the box. R was built by statisticians, and it shows. 3. **Reproducible research**: R Markdown and similar tools make it easy to bundle your data, code, and results into a single shareable document. This is especially useful for research projects. 4. **Used across academia and industry**: Knowing R opens doors to collaborating with researchers and data teams who already use it as their primary tool. If you work with data in any capacity, R is worth learning. It took me a couple of weeks to get comfortable with it, and it's been useful ever since. ### Running My Own AI Assistant on a Raspberry Pi 5 with OpenClaw February 7, 2026 https://samueledusa.com/post/raspberry-pi-openclaw I have been wanting to run a personal AI assistant that I actually control for a while now. Not something locked behind a browser tab that disappears when I close my laptop, but something always on, always available, running on my own hardware. When I came across OpenClaw, an open source AI assistant framework created by Peter Steinberger, it checked every box. It runs locally, connects to messaging platforms like WhatsApp and Telegram, and can actually execute tasks on the machine it lives on. The Raspberry Pi 5 felt like the perfect home for it. Low power, always on, and cheap enough that I would not stress about dedicating it entirely to this purpose. In this post I will walk through exactly how I set the whole thing up from scratch, from imaging the SD card to running the OpenClaw gateway. ## What You Need Before getting started, here is the hardware I used: **Raspberry Pi 5 (8GB RAM)** which you can pick up on Amazon here. I went with the 8GB model because RAM on the Pi cannot be upgraded later and OpenClaw benefits from the extra headroom, especially when controlling a headless browser or running multiple integrations. You will also want a USB-C power supply (the official Raspberry Pi one works great), a microSD card (32GB minimum, I used 64GB), and an ethernet cable or WiFi credentials for your network. ## Flashing the Image with Raspberry Pi Imager The first step is getting an operating system onto the microSD card. I used the Raspberry Pi Imager which you can download on your Mac or Windows machine. Once installed, open the Imager and follow these steps: 1. Click "Choose Device" and select Raspberry Pi 5 2. Click "Choose OS" and select Raspberry Pi OS Lite (64-bit) under "Raspberry Pi OS (other)". I went with Lite because we do not need a desktop environment. No GUI means more RAM available for OpenClaw 3. Click "Choose Storage" and select your microSD card 4. Before writing, click the gear icon (or "Edit Settings") to preconfigure some important things In the settings screen I configured the following: - Set a hostname (for example `yourhostname`) - Enabled SSH with password authentication - Set a username and password - Configured WiFi network name and password - Set the locale and timezone This preconfiguration step saves a lot of headaches. Without it you would need to plug in a monitor and keyboard to do the initial setup. With these settings baked into the image, the Pi boots up ready to go and you can SSH right in. Click "Write" and wait for the Imager to flash and verify the image. This takes about 5 to 8 minutes depending on your SD card speed. Once done, eject the card, pop it into the Pi, plug in power and ethernet (or just power if you configured WiFi), and give it a minute to boot. ## First Boot and SSH Find your Pi on the network. You can check your router's DHCP client list or just try: ```bash ssh piname@yourhostname.local ``` If that does not resolve, find the IP from your router and use it directly: ```bash ssh piname@192.xxx.x.xxx ``` Once you are in, the first thing I did was update everything: ```bash sudo apt update && sudo apt upgrade -y ``` I also fixed my locale settings because I was getting some warnings in the terminal: ```bash sudo locale-gen en_US.UTF-8 sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 sudo dpkg-reconfigure locales sudo reboot ``` ## Connecting to WiFi (If You Did Not Preconfigure It) If you need to connect to a different WiFi network after the initial setup, you can use `nmcli` which comes with the newer Raspberry Pi OS: ```bash sudo nmcli device wifi list sudo nmcli device wifi connect "YourNetworkName" password 'YourPassword' ``` You can verify the connection with: ```bash nmcli connection show ``` ## Installing OpenClaw This is where it gets fun. OpenClaw needs Node.js to run, so let us get that set up first. The version that ships with Raspberry Pi OS is usually too old, so I installed it from the package manager and supplemented with additional tooling: ```bash sudo apt update sudo apt install -y nodejs npm git jq ripgrep curl wget build-essential ``` I also installed Chromium for browser automation capabilities that OpenClaw can use: ```bash sudo apt-get install -y chromium ``` Now for OpenClaw itself. The easiest path is the one-line installer from the OpenClaw website: ```bash curl -fsSL https://openclaw.bot/install.sh | bash ``` After the installer runs, you need to configure it: ```bash openclaw configure ``` One thing I ran into was a path issue. The default config referenced `/home/node` as the workspace directory, which does not exist on a standard Pi setup. I fixed this by editing the config file: ```bash cat ~/.openclaw/openclaw.json | grep workspace sed -i 's|/home/node/.openclaw/workspace|/home/piname/.openclaw/workspace|g' ~/.openclaw/openclaw.json mkdir -p ~/.openclaw/workspace ``` ## Running the Onboarding Wizard OpenClaw ships with an onboarding process that walks you through connecting your LLM provider, setting up messaging channels, and configuring skills. I cloned the repo to have access to the scripts directly: ```bash git clone https://github.com/openclaw/openclaw cd openclaw ``` Then ran the onboarding: ```bash node scripts/run-node.mjs onboard ``` The onboard script asks you to choose your LLM provider (Claude, GPT, etc.), set up your API keys, and configure which messaging channels you want to use. I connected Telegram first since the setup is straightforward: you create a bot through BotFather on Telegram, grab the token, and plug it in. ## Starting the Gateway Once configuration is done, start the gateway: ```bash node scripts/run-node.mjs gateway ``` The gateway runs on port 18789 by default. If you want to access the dashboard from another machine on your network, you can SSH tunnel into it: ```bash ssh -L 18789:127.0.0.1:18789 piname@192.xxx.x.xxx ``` Then open `http://127.0.0.1:18789` in your browser on your main machine. ## What I Learned Along the Way I will be the first to admit this was not a perfectly clean install. My terminal history tells the story. I initially tried to run OpenClaw through Docker, got it partially working, then decided to rip it all out and go with a bare metal install instead. If you look at my command history you will see the full Docker installation and removal cycle: ```bash curl -sSL https://get.docker.com | sh sudo usermod -aG docker $USER # ... tried docker compose, things did not work as expected ... sudo apt remove --purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd ``` I also installed Bun and tried multiple ways to start the project before landing on the `node scripts/run-node.mjs` approach: ```bash curl -fsSL https://bun.sh/install | bash bun install bun start # did not work as expected pnpm start # also tried this ``` The lesson here is that the installer script (`curl -fsSL https://openclaw.bot/install.sh | bash`) combined with the onboard wizard is the cleanest path. I complicated things by trying to run from source and through Docker before settling on the recommended approach. ## Security Note This is important and I want to call it out specifically. OpenClaw has shell access to your Pi. That means it can run commands, read files, and interact with anything on the machine. This is what makes it powerful but it is also what makes it risky if you are not careful. Running it on a dedicated Raspberry Pi rather than your main computer is a smart move for exactly this reason. The Pi acts as a sandbox. If something goes sideways, it is an isolated device and not your primary workstation. Do not expose port 18789 directly to the internet without authentication. Use Tailscale or Cloudflare Tunnels if you need remote access. ## Conclusion Having an AI assistant that runs 24/7 on a $60 device in my office, that I can message from my phone and have it actually do things on my behalf, feels like a shift in how I interact with AI. It is not a chat window I visit when I have a question. It is closer to a coworker who is always available. The Raspberry Pi 5 handles it without breaking a sweat since most of the heavy compute happens on the LLM provider side. The Pi is really just orchestrating. If you have a Pi sitting in a drawer collecting dust, this is a great use for it. ### How to deploy a React App to Github Pages Aug 10, 2022 https://samueledusa.com/post/react-githubpages In this short tutorial I will show you how I went about creating a React app and deployed it to Github Pages (a free web hosting service provided by Github). I used Create React App (a tool used to build React applications from scratch) and gh-pages (an `npm` package that makes deployment to Github Pages pure bliss). ## Prerequisites --- 1. You need to have Node.js and npm installed on your computer. These are the versions I will be using for this tutorial (you don't have to have the same versions btw). ~~~js $ node --version v16.11.1 $ npm --version 8.0.0 ~~~ Personally, I use nvm (a version manager for node.js that allows you to quickly install and use different version of node via the command line). 2. You should also have `Git` installed. The version I will be using is: ~~~js $ git --version git version 2.37.0 (Apple Git-136) ~~~ 3. You should have a Github account or set one up. ## Steps --- ### 1. Create an empty Github repository 1. Sign into your Github account. 2. Create a `new repository` (you can find the create a new repository here. *Screenshot of the form shown below* ![Create New Repository](/images/create-new-repository.jpg 'Create New Repository') 3. Fill out sections of the form as follows: - **Repository name:** You can use any name you want, e.g. *portfolio (that's what I chose)*, my-personal-page, etc. - **Repository privacy:** Select *Public*. *NB:* For Github Free users, the only type of repository that can be used with GitHub Pages is *Public*. For Github Pro users (and other paying users), both *Public* and *Private* repositories can be used with GitHub Pages. - **Initialize the repository:** Just leave this as is (don't check the box or make any drop down selections). Doing this will create an empty Github repository rather than pre-populate it with a `README.md`, `.gitignore` and/or a `LICENSE` file. 4. Submit the form. Your GitHub account should now contain an empty repository with the name and privacy setting you requested. ### 2. Creating the React App 1. Create a React App and name it `sedusa-githubio` (this is the name I chose but you can choose whatever name you want. Just make sure you replace `sedusa-githubio` with whatever name you choose in your project) by running the following terminal command: ~~~js $ npx create-react-app sedusa-githubio ~~~ This command will create a new folder named `sedusa-githubio`, which will contain the source code for the React app. 2. Enter the folder for `sedusa-githubio`: ~~~js $ cd sedusa-githubio ~~~ 3. Install the `gh-pages` npm package - Install the `gh-pages` npm package as a development dependency ~~~js $ npm install gh-pages --save-dev ~~~ The `gh-pages` npm package is now installed on your computer and the React app's dependence upon it is documented in the React app's `package.json` file (seen as a property of `devDependencies`). ~~~js { ... "devDependencies": { "gh-pages": "^4.0.0" } } ~~~ 4. Add a `homepage` property to the `package.json` file. - Open the `package.json` in a text editor (I use Visual Studio Code. - Add a `homepage` property in the following format: ~~~js https://{username}.github.io/{repo-name} ~~~ *NB:* For a project site that's the format. For a user site, the format is: `https://{username}.github.io.` You can read more about the homepage property in the https://create-react-app.dev/docs/deployment/#github-pages section of the `create-react-app` documentation. ~~~js { "name": "sedusa-githubio", "version": "0.1.0", "private": true, "homepage": "https://sedusa.github.io/portfolio", } ~~~ 5. Add the deployment scripts to the `package.json` - Open the `package.json` file in your text editor. - Add the `predeply` and `deploy` properties to the scripts object. *NB:* The `predeploy` script is used to bundle the React application and the `deploy` script deploys the bundled file. ~~~js { "scripts": { "predeploy" : "npm run build", "deploy" : "gh-pages -d build", "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, } ~~~ 6. Add a `remote` that points to the Github repository - Add a remote to the local Git repository by doing: ~~~js $ git remote add origin https://github.com/{username}/{repo-name}.git ~~~ *NB:* Replace `{username}` with your GitHub username and `{repo-name}` with the name of the GitHub repository created in Step 1, e.g. ~~~js $ git remote add origin https://github.com/sedusa/portfolio.git ~~~ 7. Deploy the React app to Github Pages - Deploy the app to Github Pages by running the command: ~~~js $ npm run deploy ~~~ This command will cause the `predeploy` and `deploy` scripts defined in `package.json` to run. Under the hood, the `predeploy` script will build a distributable version of the React app and store it in a folder named build. Then, the deploy script will push the contents of that folder to a new commit on the `gh-pages` branch of the GitHub repository, creating that branch if it doesn't already exist. By default, the new commit on the `gh-pages` branch will have a commit message of `"Updates"`. You can specify a custom commit message via the `-m` option: ~~~js $ npm run deploy -- -m "Deploy my awesome app to Github Pages" ~~~ GitHub Pages will automatically detect that a new commit has been added to the `gh-pages` branch of the GitHub repository. Once it detects that, it will begin serving the files that make up that commit (in this case, the distributable version of the React app) to anyone that visits the `homepage` URL you specified in the `package.json` (Step 4). At this point, the React app is accessible to anyone who visits the `homepage` URL you specified in Step 4. For example, this React app is accessible at https://sedusa.github.io/portfolio. ## Time to celebrate! The React App is now live on Github Pages 🙌🏽 ![Celebrate](https://media.giphy.com/media/3ornkdtVzQfIRpwfug/giphy.gif){:class="gif"} ## Code --- Here is a link to the code for this deployed app. ## References --- 1. The create-react-app deployment guide 2. Build and deploy GitHub Pages from any branch 3. Gitname: Deploying a React App to Github Pages 4. Getting started with Github Pages ### Inside SGMC Health's Internal Medicine Residency Program Jan 3, 2025 https://samueledusa.com/post/sgmc-podcast I got to join my colleague Dr. Anna Ledford on SGMC Health's podcast to talk about what residency is actually like. We covered our paths to medicine, what daily life looks like as internal medicine residents at SGMC Health, and why primary care matters more than most people think. ![Podcast episode](/images/sgmc-podcast.jpg "What Brings Your In Podcast") Discussing residency life on SGMC Health's "What Bring's You In" Podcast We talked about our different paths into medicine. Neither of us took a straight line to get here, which I think is true for a lot of residents. We also got into the day-to-day of residency: early morning rounds, clinic, the learning curve that never quite levels off. One thing we both wanted to emphasize was primary care. Having a consistent doctor who knows your history, who sees you regularly, makes a real difference in catching things early and keeping people out of the hospital. We also talked about the residency program itself and what it's like training in South Georgia. It's a different experience from a big academic center, and in a lot of ways I think it's better preparation for the kind of medicine most of us will practice. If you're curious about what medical training looks like from the inside, or you're considering a career in medicine, give it a listen. ### You can watch the entire podcast episode below
### Six Fangs Of Georgia September 8, 2025 https://samueledusa.com/post/six-fangs-of-georgia ## The Case Margaret (name changed for privacy), a 71-year-old avid gardener, arrived at our emergency department after being bitten by what she believed was a baby rattlesnake while gardening. She felt a "sting" in her pinky finger while wearing gloves, discovered two puncture wounds with bleeding, and rushed to the ED after she noticed her finger begin to swell. This case highlights both the dangers lurking in Georgia's backyards and the effectiveness of modern antivenom therapy. ![Bite 1](../images/bite.jpeg) Image showing bite area of left little finger (obtained with patient consent). ![Bite 2](../images/bite2.jpeg) Image showing bite area of left little finger (obtained with patient consent). ## Georgia's Six Venomous Snakes Of the 46 species of snakes known from Georgia, only six species are venomous: Copperhead, Cottonmouth, Eastern Diamondback Rattlesnake, Timber/Canebrake Rattlesnake, Pigmy Rattlesnake and Eastern Coral Snake. Only the Timber Rattlesnake, Eastern Diamondback Rattlesnake and Cottonmouth realistically represent a serious threat to human life. ### The Rattlesnakes **Eastern Diamondback (*Crotalus adamanteus*)** - The largest venomous snake in North America, reaching up to 7 feet but typically 3-5 feet. Found in Georgia's Coastal Plain with distinctive diamond patterns. ![Eastern Diamond back](../images/eastern-diamondback.jpeg) **Timber/Canebrake Rattlesnake (*Crotalus horridus*)** - Large snakes up to 6 feet with dark chevron patterns and solid black tails, earning the nickname "Velvet Tail." ![Timber Rattlesnake](../images/timber-cranebake.jpeg) **Pygmy Rattlesnake (*Sistrurus miliarius*)** - The smallest at 16-23 inches, but their venom can still cause significant complications, especially in children and elderly patients. ![Pygmy Rattlesnake](../images/pygmy-rattlesnake.jpeg) ### The Vipers **Copperhead (*Agkistrodon contortrix*)** - The most commonly encountered venomous snake in metro Georgia, identifiable by hourglass-shaped crossbands that are wider at the sides. ![Copperhead](../images/copperhead.jpeg) **Cottonmouth (*Agkistrodon piscivorus*)** - Semi-aquatic snakes that prefer swampy habitats. They display defensive behavior by opening their mouth wide to show the white interior. ![Cottonmouth](../images/cottonmouth.jpeg) **Eastern Coral Snake (*Micrurus fulvius*)** - Distinguished by red, black, and yellow banding. Remember: "Red touch yellow, deadly fellow; red touch black, venom lack." ![Eastern Coral Snake](../images/eastern-coral.jpeg) ## Margaret's Clinical Presentation Margaret showed classic signs of pit viper envenomation: - **Local effects**: Pain, swelling, and purplish discoloration at the bite site - **Progressive edema**: Swelling from finger to wrist - **Systemic signs**: Elevated heart rate and blood pressure (184/88) - **Lab findings**: Elevated lactate (3.10), normal coagulation studies We documented baseline circumferential measurements at four sites to monitor progression: - Finger joint: 5 cm - Left mid palm: 23 cm - Left wrist: 16 cm - Forearm: 15 cm ## Treatment with CroFab® After consulting Georgia Poison Control (1-800-222-1222), we administered six vials of CroFab® antivenom. CroFab® Crotalidae Polyvalent Immune Fab (Ovine) is a sheep-derived antivenin indicated for the management of adult and pediatric patients with North American crotalid envenomation. In pre- and postmarketing studies, 67-88% of patients achieved initial control with an initial dose of 4-6 vials when given according to recommended dosing. **Our Protocol:** - Given six vials of CroFab® IV - Admitted to the ICU for monitoring with continuous cardiac monitoring - Serial labs: CBC, BMP, coagulation studies, lactic acid, fibrinogen Q2H assessment of erythema leading edge and 4 documented measurement sites; monitoring for compartment syndrome - Elevation of the arm and adequate pain control - Escalation: If envenomation progressed beyond the marked boundaries, the plan was to restart a maintenance dose of CroFab 2 vials Q6H × 3 doses over 18 hours and to continue Q2H reassessment ## Key Medical Considerations **Recurrent Coagulopathy:** In clinical trials, recurrent coagulopathy occurred in approximately half of the patients studied. Recurrent coagulopathy may persist for 1 to 2 weeks or more. **Dosing Guidelines:** Administer an initial dose of 4-6 vials and monitor for signs of progression. Once initial control is achieved, administer an additional 2 vials every 6 hours for up to 18 hours (total of 3 doses). ## Prevention Strategies **For Gardeners:** - Wear thick gloves and closed-toe shoes - Don't reach into areas you can't see clearly - Be aware of surroundings, especially near brush piles **Important Facts:** - Most bites occur when people try to kill or handle snakes - According to the American Association of Poison Control Centers, only 20 venomous snake bites reported nationwide during the same period were fatal, an average of two fatalities a year. - In Georgia, it is illegal to possess or kill many of the state's nongame wildlife species, including non-venomous snakes (punishable by up to a $1,000 fine and a year in jail). ## First Aid Guidelines **DO:** - Stay calm and get to the hospital immediately - Call 911 or Georgia Poison Control (1-800-222-1222) - Identify the snake by sight only - Keep patient calm and affected limb level **DON'T:** - Try to kill the snake - Use a tourniquet - Cut the wound or suck venom - Pack in ice - Give food, drink, or medication ## Margaret's Outcome Margaret recovered completely. The CroFab® controlled envenomation progression within hours, and she was monitored in the ICU for 48 hours with no coagulopathy complications. ## Clinical takeaways If you're managing a snake bite: document swelling progression with serial circumferential measurements. That objective data is what guides your treatment decisions. Call poison control early. They'll help with both initial treatment and ongoing management. Most patients need at least 24 hours of observation because of systemic signs and coagulopathy risk. And watch for recurrent coagulopathy, which can show up as late as two weeks after treatment. Georgia has 47 snake species, one of the highest diversities of any U.S. state. That's a sign of a healthy ecosystem. Venomous snakes included, they provide real ecological benefits like rodent control. Knowing which snakes are dangerous and respecting the ones that aren't goes a long way toward preventing bites and protecting species that don't deserve to be killed on sight. ## Conclusion Margaret did well. With proper identification, fast treatment, and CroFab, her envenomation was controlled and she recovered fully. The lesson: prevention is better than treatment. Wear gloves in the garden, don't reach where you can't see, and if you do get bitten, get to a hospital fast. --- *Patient details were been modified to protect privacy while maintaining clinical accuracy. For snake bite emergencies, always call 911 and Georgia Poison Control at 1-800-222-1222.* ### Addressing Farmer Health at the 46th Sunbelt Agricultural Exposition Oct 18, 2024 https://samueledusa.com/post/sunbelt-ag-expo-2024 ![Aerial view of the expo](/images/ag-expo-aerial.jpeg) Aerial view of the expo. Source: https://www.farm-monitor.com/sunbelt-ag-expo-back/ I recently presented on skin cancer and farmers at the 46th Annual Sunbelt Agricultural Exposition in Moultrie, Georgia. The event ran October 15-17, 2024, at Spence Field. If you haven't been, it's one of the biggest farm shows in the country. ## The Expo The Sunbelt Ag Expo covers 93 acres with over 850 exhibitors. Farmers, educators, policymakers, and people who are just interested in agriculture all show up. There are equipment demonstrations, the Southeastern Farmer of the Year announcement, and hundreds of seminars. ![At the expo grounds](/images/ag-expo-grounds.jpeg) At the expo grounds Florida was the 2024 Spotlight State. The organizers also set up collection bins for hurricane victims, which felt right given what parts of the Southeast had just been through. ## Education at the expo The expo runs over 300 seminars and demonstrations covering beef, dairy, forestry, equine management, and more. The 530-acre research farm hosts field demonstrations with the latest harvesting and tillage equipment, which drew big crowds. ## Healthcare in agriculture This year, the expo partnered with Philadelphia College of Osteopathic Medicine (PCOM) South Georgia to add a healthcare exhibit. That's where I came in. I gave a presentation on skin cancer, focused on farmers who spend most of their working hours in direct sun. ![Day 2 presentation schedule](/images/ag-day-2.jpeg) Schedule for day 2 of the expo ## An encounter after the talk After my presentation, a man came up and showed me two spots on his skin that he'd been worried about. I looked at them and strongly encouraged him to follow up with his primary care doctor or a dermatologist. He thanked me, and it was one of those moments that reminded me why having healthcare professionals at events like this matters. This man might not have brought those spots up at a doctor's visit, but in that setting, it felt natural for him to ask. ![Day 2 presentation schedule](/images/ag-presenting.jpeg) Presenting on skin cancer with a focus on farmers ## What I took away Farmers deal with sun exposure that most of us don't think about. Eight, ten, twelve hours a day, often without adequate sun protection. Skin cancer prevention isn't usually on the agenda at agricultural events, but it should be. Going to this expo made that clear to me. If you're in agriculture or healthcare in the Southeast, the Sunbelt Ag Expo is worth attending. The equipment and technology are impressive, but the real value is connecting with the community and finding ways to address health needs that often go overlooked. ### Building a Native Telegram Chat Viewer for macOS October 3, 2025 https://samueledusa.com/post/telegram-chat-viewer-tauri I recently built a desktop application to solve a problem I kept running into: browsing through exported Telegram chats. If you've ever exported a Telegram conversation, you know you get a folder full of HTML files that aren't particularly easy to navigate or search through. I wanted something better, a native app that felt at home on macOS and could actually handle my large chat exports without grinding to a halt. ## The Problem Space Telegram's export feature is fantastic for backing up your conversations, but the output isn't exactly user-friendly. You get: - Multiple HTML files (`messages.html`, `messages2.html`, etc.) that split your conversation across files - A folder structure with photos, videos, and other attachments - Basic styling that works in a browser but lacks search, filtering, or any modern conveniences For small exports, opening these in a browser works fine. But when you're dealing with years of messages (think 10,000+ in a single chat), browsers start to struggle. I needed something purpose-built. ## Why a Desktop App? I could have made this a web app (and actually started there), but I kept hitting limitations. Desktop apps have access to the file system in ways that web apps can't. Native file pickers, reading entire folders at once, and better performance with large datasets all pushed me toward going native. The question was: which framework? ## Choosing Tauri Over Electron Most developers building desktop apps with web technologies reach for Electron. It's mature, well-documented, and powers apps like VS Code and Slack. But Electron apps are notoriously heavy. Shipping an entire Chromium browser with every app means bloated bundle sizes and hefty memory usage. Enter Tauri. Tauri is a newer framework that takes a different approach. Instead of bundling a browser, it uses the operating system's native WebView (on macOS, that's WKWebView). The backend is written in Rust rather than Node.js, which gives you: - **Tiny bundle sizes** - My app builds to under 10MB compared to 100MB+ with Electron - **Better performance** - Rust is fast, and the native WebView is optimized by Apple - **Lower memory usage** - No bundled browser means less RAM consumption - **Native feel** - Apps integrate seamlessly with macOS conventions The trade-off? Less mature ecosystem and a steeper learning curve if you're not familiar with Rust. But for a macOS-only app, the benefits far outweighed the costs. ## The Tech Stack I landed on a stack that balanced modern developer experience with performance: **Frontend:** - React 18 with TypeScript for type safety - Tailwind CSS for rapid UI development - Cheerio for parsing HTML (Telegram's exports are HTML, after all) - Lucide React for clean, consistent icons **Backend:** - Tauri 2.0as the desktop framework - Rust for the backend (though I kept it minimal) - Tauri plugins for file system access and native dialogs **Build Tools:** - Vite for lightning-fast development and builds - TypeScript in strict mode to catch errors early ## The Architecture The app has a straightforward architecture: 1. **File Loading**: Users can select either a folder (containing all the export files) or individual HTML files through native macOS dialogs 2. **Parsing**: Cheerio parses the HTML to extract messages, timestamps, sender names, links, and media attachments 3. **State Management**: React hooks manage the application state, so there's no need for Redux or MobX here 4. **Rendering**: Messages display in either a compact list view or a more detailed card view 5. **Search**: Real-time filtering across all message content, sender names, and links The parsing logic was particularly interesting to implement. Telegram's HTML structure looks like this: ```html
05:54
deviant cat
``` I built a parser that extracts: - Message IDs for unique identification - Sender names (with handling for "joined" messages where the sender repeats) - Full timestamps from the `title` attribute - Message text content - All links in the message - Media attachments with type detection (PDFs, images, zips, etc.) ## Features that made a difference ### Two View Modes I implemented both list and card views because different situations call for different browsing patterns: **List View** is compact and fast, perfect for skimming through thousands of messages. It uses `react-window` for virtual scrolling, meaning only visible messages render. This keeps the app responsive even with 10,000+ messages loaded. **Card View** gives you more breathing room. Messages display in a responsive grid (1-3 columns depending on window width) with full text content and link previews. Great for reading through conversations more deliberately. ### Smart link previews One pattern I noticed in my exports: lots of messages that were just a single link. Rather than displaying these as plain text, I built rich link preview cards that show: - The domain and site name - An extracted or generated title - The full URL - If I can fetch metadata (via Open Graph tags), the description and image preview These previews are lazy-loaded. They only fetch metadata when scrolling near them, keeping initial load times fast. ### Real-time search The search functionality might be my favorite feature. It's: - **Fast** - Debounced to 150ms with memoized filtering - **Comprehensive** - Searches message text, sender names, URLs, and media filenames - **Live** - Shows "X of Y messages" count that updates as you type - **Keyboard-friendly** - `⌘F` focuses the search, `Esc` clears it ### Native macOS integration To make this feel like a real Mac app, not just a web page in a window, I implemented: - Native menu bar with File and View menus - Keyboard shortcuts that Mac users expect (`⌘O` to open, `⌘1`/`⌘2` to switch views) - Native file and folder pickers - Opening links in the user's default browser - System-aware dark mode that respects macOS appearance settings ### Dark mode and media previews Rather than ship without polish, I added two features that made a real difference: **Dark Mode**: The app now includes a complete dark theme that adapts all UI elements. I didn't want a half-baked implementation where some components still burned your retinas at night. Every card, button, search bar, and text element has been carefully styled for both light and dark modes. Users can toggle between themes with a button in the header, and the preference persists across sessions. **Media Previews**: Messages with image attachments now display actual thumbnails rather than just filenames. When someone shares a photo in the chat, you see it inline with the message. The app locates the image files in the export folder and renders them directly, making photo-heavy conversations much easier to browse. I implemented lazy loading here too, so images only load as you scroll near them. That keeps performance smooth even with hundreds of photos in a chat. ![Telegram Chat Viewer](../images/app-layout.jpeg) Screenshot showing the Telegram Viewer App ### The app icon I designed the app icon using ChatGPT. I described what I wanted and iterated through a few variations until I got something I liked. Small detail, but a polished icon makes the app feel more real when it sits in your dock next to everything else. ![App logo](../images/app-logo.jpeg) Screenshot showing the Telegram Viewer App Logo ## Performance optimizations Large chat exports were my benchmark for performance. Here's what I did: **Memoization Everywhere**: React's `useMemo` and `useCallback` hooks prevent unnecessary recalculations. Filtering 10,000 messages is real work, and there's no need to redo it on every render when only the search term changed. **Component Memoization**: Message cards are wrapped in `React.memo` with custom comparison functions. If a message's data hasn't changed, don't re-render it. **Virtual Scrolling**: The list view only renders visible messages plus a small buffer. Scrolling through 50,000 messages feels just as smooth as scrolling through 50. **Lazy Loading**: Link preview metadata only fetches when the preview scrolls near the viewport, using Intersection Observer. **Sequential Parsing**: Rather than trying to parse all files at once, the app parses them sequentially with a loading indicator. This keeps the UI responsive and gives users feedback. ## What I learned ### Rust isn't as scary as I thought I was hesitant about writing Rust, but Tauri abstracts most of it away. My `main.rs` file is barely 15 lines, mostly just menu bar configuration. The Tauri plugins handle all the heavy lifting for file system access. ### TypeScript pays off even more in desktop apps Type safety became more valuable than usual here. The back-and-forth between Tauri commands, React state, and file system operations created a lot of places where types could mismatch. TypeScript caught those at compile time. ### Users notice native details Beta testers immediately noticed things like keyboard shortcuts, native file pickers, and menu bar integration. These details matter for desktop apps in a way they don't for web apps. ### Performance is about perception Getting 10,000 messages to load in under 5 seconds wasn't enough. Users also needed to *see* progress. Loading indicators, skeleton screens, and progressive rendering made the app feel fast even during heavy operations. ## The build process The development workflow is solid: ```bash npm run tauri:dev ``` This starts the Vite dev server and launches the app with hot module reloading. Changes to React components appear instantly. Changes to Rust code trigger a recompile (which is slower, but I rarely touched the Rust side). Building for production: ```bash npm run tauri:build ``` This creates a `.dmg` installer ready for distribution. The entire build, including compiling the Rust backend and bundling the frontend, takes about 2 minutes on my machine. ## Screen recording of the app in use ## What's next This is version 1.0 with dark mode and media previews. Some things I'd like to add: - **Date range filters** - Search by time period - **Export functionality** - Save filtered results to CSV or JSON - **Multi-chat support** - Load and switch between multiple chat exports - **Message threading** - Display replies and quoted messages - **Advanced filters** - Filter by media type, sender, or date - **PDF export** - Generate formatted PDFs of conversations ## Try it yourself The app is open source and available on my GitHub. If you have Telegram chat exports sitting around and want a better way to browse them, give it a try. You'll need: - Node.js (v18+) - Rust (latest stable) - Xcode Command Line Tools Then just: ```bash git clone [your-repo-url] cd telegram-chat-viewer npm install npm run tauri:dev ``` ## Final thoughts Building this taught me that desktop app development doesn't have to mean Electron. Tauri is a solid alternative, especially for single-platform apps where you can lean on the native WebView. With React, TypeScript, and Tailwind, I built a UI in days that would have taken weeks in native Swift. But unlike a web app, this feels fast, lightweight, and actually native. If you're thinking about building a desktop app, give Tauri a look. ### He Walked Away From the Crash. The Trouble Had Started Months Earlier. Dec 10, 2025 https://samueledusa.com/post/the-crash _**Note:** Names and certain details in this story have been modified to protect patient privacy._ The call came in as a routine trauma alert. A car had veered off the road and struck a tree just outside town. The driver, a 37-year-old man, wasn't wearing a seat belt. Firefighters needed extra time to extract him. When he arrived at the emergency department, he smelled strongly of alcohol, spoke only Spanish, and seemed confused about where he was or how he'd gotten there. ![Sketch of car crash scene](/images/crash-site.jpeg "Crash scene sketch") Samuel Edusa, MD. "An AI Generated Sketch of a Car Crash Scene." 2025, Digital artwork generated using Google Gemini. Personal collection. At first glance, his injuries seemed modest. He complained mostly of soreness along his ribs and shoulder. His vital signs were stable. X-rays and scans of his chest and abdomen showed no broken bones, no bleeding, no collapsed lung. For a crash that looked dramatic at the scene, his body had escaped the worst of it. But there were details that didn't quite fit. ## The Clues That Didn't Belong While we waited for his blood alcohol level to drop, we spoke with his daughter and a roommate who had been in the car that night. The roommate mentioned something unrelated to the crash itself. About a month earlier, he'd seen the man stiffen, shake violently, and foam at the mouth. The episode lasted several minutes. When it ended, the man was exhausted and confused. There had been another similar episode months before that. He'd never gone to the hospital. When the patient was more alert, he acknowledged the spells. He said he could sometimes feel them coming. A strange sensation in his body, followed by darkness. Over the past few months, he'd also been dealing with persistent headaches and brief episodes of double vision, which he'd learned to ignore. Because of the crash, we'd already done a CT scan of his head to rule out bleeding or swelling from trauma. Instead, it revealed something unexpected: multiple small, round spots scattered throughout his brain, some hardened with calcium, others appearing cyst-like. The pattern didn't look like bruising from an accident. It looked older, as if it had been there long before the car left the road. ![Brain CT scan showing multiple lesions - sagittal view](/images/brain-ct-lesions-1.jpeg "Brain CT scan with multiple lesions") Samuel Edusa, MD. "Patient CT Scan Showing Multiple Small Lesions Scattered Throughout the Brain." 2025, Actual patient imaging. We called neurology. An MRI followed. The images showed numerous tiny lesions, each with a characteristic ring and dot, spread across the frontal and parietal lobes, with even one tucked into a ventricle. There was no single mass to blame, no obvious tumor, no stroke. Instead, it looked like a constellation of small invaders, frozen at different stages of life. ![Brain MRI showing characteristic ring and dot lesions](/images/brain-ct-lesions-2.jpeg "Brain CT with ring and dot lesions") Samuel Edusa, MD. "Patient CT Scan Showing Multiple Small Lesions Scattered Throughout the Brain." 2025, Actual patient imaging. The man's story complicated things. He'd grown up in rural Mexico and had lived in the United States for only a few years. He worked, drove, sent money home. He didn't recall eating undercooked meat. He denied contact with farm animals. His blood tests showed no dramatic signs of infection. His eyes, carefully examined by an ophthalmologist, were clear. No parasites lurking where treatment could cost him his vision. In the hospital, he didn't have another seizure. Anti-seizure medication steadied him. We started steroids cautiously, not as treatment themselves but to prepare his brain for what might come next. An infectious disease specialist weighed in. A neurosurgeon reviewed the scans and agreed there was nothing to operate on. The danger, he explained, wasn't pressure or bleeding. It was inflammation, what could happen if the immune system suddenly recognized what had been hiding in his brain all along. ## A Diagnosis That Explained Everything Only after days of imaging, consultations, and careful conversations did the pieces come together. The seizures, the headaches, the strange spots on the scans, and even, perhaps, the crash itself all traced back to a single cause. The man was living with a parasitic infection of the brain, acquired years earlier and only now making itself impossible to ignore. It was a diagnosis rarely seen by many physicians, yet one of the most common causes of adult-onset seizures worldwide: neurocysticercosis. A disease that can lie silent for years before announcing itself, abruptly, in the middle of an ordinary life.

--- _This case is part of a collection of cases I have seen during my internal medicine rotation, written in the style of The New York Times Diagnosis column, which I subscribe to and enjoy reading._ ### Two Patients, One Week, and the Question I Couldn't Stop Asking April 5, 2026 https://samueledusa.com/post/two-patients-one-week ![A dying man](/images/dying-man.jpeg) *Samuel Edusa, MD. "An AI Generated Sketch of a Dying Man." 2026, Digital artwork generated using Google Gemini. Personal collection.* The brother was reclined in the chair next to the bed in room 412, a blanket pulled over his legs, resting comfortably. He had been there for hours. Days, maybe. He watched everything I did with the kind of quiet attention you give someone you do not fully trust. His brother, my patient, lay motionless beneath a thin hospital blanket, seventy-some pounds of a man who had once been much larger, his cheekbones sharp enough to cast shadows under the fluorescent lights. Advanced lung malignancy. Cachectic to the point where his arms looked like they could snap. Non-verbal for days. The family had brought him in from home. They had been trying alternative treatments after declining the biopsy that pulmonology had recommended and the chemotherapy that oncology had offered. The oncologist, in fairness, had maintained optimism. Curative intent was discussed. Options were presented. And the family had listened and then walked the other way. I do not judge that decision. I understand it more now than I did that week. The brother held the power of attorney. He was polite, careful with his words, and immovable. When I brought up goals of care, gently I thought, he looked at me with an expression I have since learned to read better than I could then. It was not confusion. It was not denial. It was something closer to resolve. He did not want his brother made DNR. He did not want to talk about comfort care. He did not want to hear what I was really saying, which was that this man was dying and that the most loving thing we could do was let him do it in peace. A few days later, the patient coded. The brother was not there. He was at home. The ICU team ran the code. They did chest compressions on a man who weighed seventy pounds, whose ribs you could see shifting under the force. They called the brother. Even over the phone, even from home, he held on. He asked the team to continue compressions. Still hanging onto hope. The team ultimately called the code after about ten minutes. I heard about it the next day. And I could not stop thinking about it. Not just the death, but the distance between what we thought we were offering that family and what they actually heard from us. That same week, three rooms down, I was managing a white woman in her sixties with a thymic malignancy that had metastasized. She had fallen and fractured her hip. When she came in, she told the orthopedic team exactly what she wanted: fix the fracture with a nail so she could spend her last days walking, not in a wheelchair. That was it. She was not asking them to cure her cancer. She was asking them to let her be on her feet for whatever time she had left. Orthopedics took her to the OR, nailed the intertrochanteric fracture, and post-op she was back on our service. When I walked in for rounds, she was sitting up in bed, reading. She knew her cancer was not curable. She had made her peace with it. She wanted hospice. She wanted to be in her own house. She had her advance directive in place, had named her daughter as her healthcare proxy, and had specific wishes about what she did and did not want done if things went south. The whole conversation took ten minutes. She thanked me. I put in the hospice referral. She went home two days later. I kept thinking about those two patients for weeks. Not because one made the right decision and the other made the wrong one. I do not believe that is the correct framing. Both families loved the person in that bed. Both were facing something unbearable. But the paths they took could not have been more different, and the outcomes, the suffering involved, the quality of the dying, were not the same. The easy explanation is culture. You hear it in the break room, in the hallways, sometimes even in the literature: African-American families "want everything done." They are more religious. They do not believe in giving up. These are the shorthands we reach for when a goals-of-care conversation does not go the way we expected. But the more I sat with what happened in room 412, the more those explanations felt hollow. > The brother did not refuse to let go because he did not understand. He refused because he did not trust that the system offering to let his brother die peacefully was the same system that had ever offered his brother a fair chance at living. When the oncologist talked about curative therapy, the family heard optimism, and then they heard it taken away. When I talked about comfort care, the brother heard a doctor telling him it was time to stop fighting for a Black man's life. That is not what I said. But I am increasingly certain it is what he heard. And given the history, not the abstract textbook history but the lived history of Black patients in the American South, he was not irrational to hear it that way. The Tuskegee study did not end in 1972. Its consequences are still in the room every time a Black family faces a medical team asking them to accept that nothing more can be done. Every time a provider suggests discontinuing aggressive treatment, there is a shadow in that conversation that most of us, most white and non-Black providers, do not see. The brother in room 412 saw it. I started reading. Not the surface-level papers about advance directive completion rates. Those numbers I already knew. African-Americans complete advance directives at about half the rate of white patients. That gap has not closed in twenty years. I started reading the qualitative work. The interviews with Black families who lost someone in the ICU. The focus groups with African-American churchgoers about end-of-life care. The studies on implicit bias in pain management. The economics research showing that the Tuskegee study reduced Black men's use of outpatient physicians by 22 percent. Not the men in the study, but Black men across the South who heard about it. Population-level mistrust. Generational trauma with measurable health consequences. The more I read, the clearer something became: the existing systematic reviews, and there are several good ones, all document the same barriers. Mistrust. Religiosity. Family-centered decision-making. Access. Health literacy. But none of them tell the clinician standing at the bedside what to do differently for the patient in front of them. They describe the problem. They do not hand you a tool. And that is the gap I decided to try to fill. I conducted my own systematic review. Fifty-eight studies, 2010 to 2026, covering advance care planning disparities, clinical outcome disparities, provider implicit bias, historical context, and interventions. The evidence is overwhelming and consistent. But the thing that kept nagging me was operational: how do you take what these 58 studies say and turn it into something a resident or an attending can actually use at the point of care, in real time, with a real patient? The answer I came up with is a tool I am calling the ACP-Equity Risk Index, the ACP-ERI. It is a 25-item clinician-administered instrument that does three things no existing tool does at the same time. First, it calculates a risk score for ACP non-completion based on weighted factors from the evidence: trust, access barriers, cultural factors, clinical urgency, health literacy. Second, it identifies which barrier domains are dominant for a given patient, because a patient whose primary barrier is mistrust needs a fundamentally different approach than a patient whose primary barrier is transportation. Third, it generates tailored intervention guidance. Specific conversation starters, specific clinical actions, specific evidence citations, all matched to whatever barriers are driving that particular patient's risk. There is an AI component. The tool generates culturally adapted conversation openers based on the dominant barrier profile. When a patient scores high on mistrust, the tool produces a script that opens with explicit acknowledgment of historical medical racism. Not an apology, but a recognition. When the cultural domain is dominant, the script invites family participation and integrates spiritual values. These are not generic platitudes. They are grounded in what the qualitative literature says African-American patients actually want to hear from their doctors. I built a working prototype. It runs on a phone or a tablet. A clinician can complete the assessment in three to five minutes and get immediate guidance. It generates a documentation template you can paste into the chart and bill under the ACP CPT codes. ### The ACP-ERI in Action You can try the live tool: ACP ERI Tool It is not validated yet. That is the next step, a pilot study at SGMC Health, here in Valdosta, with 200 patients. I want to know whether the tool predicts ACP completion, whether clinicians find it usable, and whether patients whose providers use it actually complete advance directives at higher rates. The IRB protocol is being submitted. I think about the brother from room 412 often. I think about what might have been different if I had walked into that room with a structured understanding of what was driving his resistance. Not resistance to his brother's death, but resistance to a system he had no reason to trust. If I had started the conversation not with "Have you thought about goals of care?" but with "I know the medical system has not always done right by people who look like your brother, and I want you to know I take that seriously." Would it have changed the outcome? Maybe not. Maybe the brother still would have wanted everything done. That is his right, and I respect it. But I would have been meeting him where he actually was, instead of where I assumed he was. And I think the quality of that encounter, the humanity of it, would have been different for both of us. The woman with the thymic malignancy did not need me to bridge a gap. She had already crossed it. She had an advance directive, a proxy, a plan. The system had worked for her the way it is supposed to work for everyone. The question that I cannot let go of is why it works for some patients and not others, and what I can do, what any of us can do, to close that gap. That is what the ACP-ERI is for. Not to replace the human conversation. To make sure the human conversation actually reaches the human being in front of you. *Minor changes have been made to clinical descriptions in this essay to protect the privacy of the patients and their families.* ### Unraveling AI Lingo: No-Blush Guide to the Terms You've Been Secretly Curious About (Part 1) Apr 16, 2023 https://samueledusa.com/post/understanding-ai-terminologies ![Robot Teacher](/images/robot-teacher.jpg "Robot teacher") Robot teaching students (created using Stable Diffusion) Artificial intelligence (AI) can seem intimidating, but the core concepts aren't that complicated. Knowing a few terms makes it much easier to follow conversations about AI and understand what's actually going on. ![AI Hierarchy Diagram](/images/ai-hierarchy-diagram.jpg "Terminology hierarchy") A simplified AI hierarchy diagram (created using Pixelmator Pro) ## What is Artificial Intelligence? ![Doctor analyzing an x-ray](/images/female-doctor-analyzing-xray-with-ai.jpg "Doctor analyzing x-ray wit ai") Radiologist using AI to help review x-ray (created using Stable Diffusion) AI is about building computer systems that can do things we'd normally need human intelligence for. The computer analyzes a situation and either takes an action or makes a prediction to achieve a goal. For example, in medical imaging: a computer can be trained to look at X-rays or MRIs and identify patterns that suggest disease. The AI _algorithm_ picks up on subtle anomalies in the images and flags them for a doctor to review. One thing worth noting: people use "AI" and "machine learning" interchangeably, but they're not the same thing. Machine learning is one approach to building AI, and it's behind most of the recent progress, but AI as a concept is broader. ## What is an algorithm? An algorithm is a set of step-by-step instructions designed to accomplish a specific task. In medicine, that might mean diagnosing a condition from symptoms or predicting how well a treatment will work. Algorithms are the foundation of AI (and computing in general). Right now, most AI applications in medicine use machine learning-based algorithms. ## What is Machine Learning (ML)? ![Machine learning](/images/machine-learning.jpg "Robot learning in front of computer") Illustration of a machine [robot] learning (created using Stable Diffusion) A machine learning model is a combination of data and methods that takes an input and produces an output. For example, a diagnostic model might take patient symptoms and lab results as input and output a prediction about what disease the patient has. The model is basically a recipe: here's how to process this input to get that output. Think of it like a pharmaceutical production line. Raw materials go in, finished medication comes out. The model defines the steps (measure, mix, compress, coat) and the parameters for each step (compress at 1000 psi for 5 minutes). The key difference between machine learning and other AI approaches: in machine learning, humans don't directly program the rules. Instead, humans set up the process, provide training data (more on this below), and let the model learn on its own. When a model like Stable Diffusion or GPT3 gets released, what you're getting is the result of running machine learning algorithms on training data. The model contains all the learned rules and values needed to process new inputs. ## What is training data? Training data is a collection of examples, each with two parts: - Input - Expected output For medical imaging, this might be thousands of X-ray images, each labeled with the correct diagnosis. To build a model that identifies lung cancer in chest X-rays, you'd gather images of both cancerous and non-cancerous lungs, label them, and feed them to the model during training (explained below). ## What is training in machine learning? Training is the process of feeding labeled data into the model, checking how well the output matches what was expected, and adjusting the model's internal settings to do better next time. These internal settings are called weights or parameters (more on those below). The model repeats this cycle over and over, adjusting parameters each time to get closer to its goal. ![Machines training](/images/robot-training.jpg "Robot training another robot") Illustration of one robot training another robot (created using Stable Diffusion) Say our goal is to correctly identify 99% of pneumonia cases in chest X-rays. We set up our model and run the training data through it. The model predicts which images show pneumonia and which don't. We use a simple metric to score it: correct pneumonia identifications divided by total pneumonia images. Suppose it gets 50% right on the first pass. The model then adjusts its parameters and tries again. This time it gets 60%. Better. No human told it how to improve. The machine figured out which adjustments helped and made them on its own. This cycle repeats until the model hits 99% accuracy. At that point, we call it trained. You can now feed it a new X-ray image, and it will tell you whether it shows pneumonia with 99% accuracy. ## What is a parameter? Parameters (also called weights and biases) are the internal values in a model that can be adjusted to change its behavior. Think of a model as a medical device. Parameters are like the device's dials and settings that get tuned to do a specific job, like accurately reading vital signs. Developers don't set these values manually. The model learns them during training. ## What is a neural network? There are many machine learning training techniques, but neural networks are one of the most common. They're loosely inspired by the human brain and how biological neurons communicate. A neural network has layers: an input layer, one or more hidden layers, and an output layer. Each node (artificial neuron) connects to every node in the next layer and has its own weight and bias. ![Neural network](/images/neural-network.jpg "Neural network") An artistic illustration of a neural network (created using Stable Diffusion) During training, the parameters in each neuron get adjusted to improve performance on the target task. Here's how it flows: if a neuron's output exceeds a certain threshold, it fires and passes data to the next layer. If not, nothing gets passed along. Each layer takes the weighted sum of inputs, runs it through an activation function, and decides whether to pass the signal forward. More layers means more parameters, which lets the model handle more complex patterns and tasks. ## What is deep learning? Deep learning uses neural networks with many layers (hence "deep"). These multi-layered networks can detect complex patterns in large datasets and use those patterns to make predictions or automate tasks. Most of the recent AI breakthroughs are powered by deep learning. ## What is a generative model? A generative model learns from existing data and uses what it learned to create new data. It's commonly used to generate new images or videos. There are several types: Generative Adversarial Networks (GANs), Variational Autoencoders (VAEs), Flow-based models, and Diffusion models. Diffusion models have gotten the most attention lately. For a medical example: researchers have used diffusion models to generate realistic 3D models of human organs from existing medical images. ![Human heart](/images/human-heart.jpg "Human heart") Realistic 3D model of a human heart (created using Stable Diffusion) This helps surgeons plan procedures and gives medical students better tools for studying anatomy. ## What is a diffusion model? Diffusion models are a specific type of generative model. They work by gradually adding noise to training data until it's completely scrambled, then learning to reverse that process to recover the original data. Once trained, you can feed the model random noise and a description of what you want, and it generates new data matching that description. ![Diffusion model illustration](/images/diffusion-model-illustration.jpg "Diffusion model illustration") Explaining how diffusion models work (Source: https://www.leewayhertz.com/how-to-train-a-diffusion-model/) Text-to-image models are one example. In medicine, you could type "human heart with an enlarged left ventricle" and the model would generate an image of that. This could help doctors visualize conditions and aid in diagnosis. If you want to gain a greater understanding of diffusion models (with lots of math) checkout this link: diffusion model clearly explained ## What is GPT3? Putting it together with what we've covered: - GPT3 is an AI system that generates text. - It's a generative model, creating new text based on patterns learned from training data. - It uses deep learning with multilayered neural networks. - It's general-purpose. You can use it for writing, summarization, code generation, and more without retraining it for each task. What makes GPT3 interesting is that you don't need a separate model for each task. The same model can write a blog post, answer a question, or generate code. Researchers and developers use it for all sorts of things without fine-tuning. ## What is Stable Diffusion? The description given by Wikipedia is: ‘Stable Diffusion is a deep learning, text-to-image model released in 2022. It is primarily used to generate detailed images conditioned on text descriptions, though it can also be applied to other tasks such as inpainting, outpainting, and generating image-to-image translations guided by a text prompt.’ - Stable Diffusion is an AI that turns text descriptions into images. - It uses machine learning: instead of being explicitly programmed, it learned from massive amounts of training data. - Under the hood, it's a deep neural network with many layers of nodes that process inputs and pass results forward. - It's a generative model, meaning it creates new content from what it learned. - Specifically, it's a diffusion model: it generates images by starting with noise and gradually shaping it based on your text prompt. Now you know the basics. Go confuse your friends with your new vocabulary.
--- ### References - _A crash course in AI terms_ - https://mythicalai.substack.com/p/a-crash-course-in-ai-terms-machine - _Diffusion model clearly explained_ - https://medium.com/@steinsfu/diffusion-model-clearly-explained-cd331bd41166 ### Watching Someone Die Never Gets Easier February 21, 2026 https://samueledusa.com/post/watching-someone-die-never-gets-easier I started following a 93-year-old woman this morning in the ICU. Septic shock. Her blood pressure was tanking despite maxed-out pressors. Her kidneys were failing. Her hands and feet were mottled and cold. The family was there when I came on. Her husband wasn't around during the admission, but her kids were. They looked exhausted. Scared. Confused about what was happening. I've done this before. Too many times, probably. But it doesn't get easier. ## Explaining the Unexplainable The hardest part of these conversations isn't the medical terminology. It's finding a way to explain why someone's dying that actually makes sense to people who aren't doctors. "Septic shock" doesn't mean anything to most people. So I tried a different approach. I told them to think about the pipes in a house. When everything's working right, water flows where it needs to go, at the right pressure. But if the pipes get damaged or start leaking everywhere, you can pump all the water you want into the system, but it's not getting where it needs to go. That's septic shock. The infection damages the blood vessels. They start leaking. Blood pools where it shouldn't. And even though we're giving her fluids and medications to keep her blood pressure up, her body can't maintain the pressure needed to get blood to her hands, her feet, her organs. That's why her legs and hands hurt. Not enough blood flow. The body tries to compensate by clamping down the vessels (vasoconstriction), but that just makes it worse. They got it. I could see it click. And then I had to tell them there wasn't anything more we could do. That continuing would just prolong suffering. ## The Thank You That Hit Different When we transitioned her to comfort care, the family stayed. They sat with her. Talked to her even though she probably couldn't hear anymore. Held her hand. Just before they left, her daughter turned to me and said thank you. Not the automatic "thanks, doc" you get when you discharge someone. A real thank you. She thanked me for being honest with them. For breaking down the problem so they could understand what was happening. But most importantly, and these were her words, for allowing them to spend her precious last moments with her without machines and chaos and futile interventions. I didn't know what to say. Because standing there, I felt like I should be thanking *them*. ## The Strange Gratitude of ICU Work This sounds backwards, I know. They lost their mother. What am I thanking them for? But they let me into the most vulnerable moment of their lives. They trusted me to tell them the truth when it would have been easier for them to hear something hopeful. They let me help their mother die peacefully instead of demanding we keep going. And in doing that, they gave me perspective, something I hadn't expected. I've been so caught up in the mechanics of medicine (orders, procedures, metrics, documentation) that I forget sometimes why I'm doing this. It's not about fixing every problem. Sometimes it's about recognizing when to stop trying. This family reminded me what actually matters. ## What This Job Teaches You I went into medicine thinking I'd save lives. And sometimes I do. Sometimes someone comes in with DKA or a PE and we catch it early and they walk out a few days later and that feels good. But a lot of ICU work, maybe most of it, is helping people die with dignity. Making sure they're comfortable. Making sure their family understands what's happening. Making sure the last moments aren't spent being tortured by medical interventions that won't change the outcome. Nobody tells you that in medical school. Or if they do, it doesn't really land until you're standing there in the room. The other thing nobody tells you is that these moments make you see how fragile everything is. Life isn't some grand arc with clear beginnings and endings. It's just... moments. Breakfast conversations. Evening walks. Sitting quietly next to someone you love. And then one day it stops, and the people left behind have to figure out how to keep going without you. That patient's family? They'll remember their last night with her. I hope they remember it as peaceful. I hope they remember feeling like they got to say goodbye properly. And I'll remember them. Not because of the medical case (septic shock is septic shock) but because they reminded me why this job matters. ## The Point (If There Is One) I don't have some grand conclusion here. Life is fragile, spend time with people you love, all that stuff everyone already knows. But knowing it and *feeling* it are different. Standing in an ICU at 2 AM, watching a family say goodbye... that makes you feel it. So I guess if there's a point, it's this. Don't waste the good days. Not all of them, anyway. Call people back. Show up when it matters. Pay attention to the moments that seem small but aren't. Because eventually, you run out of moments. And the people left behind have to figure out how to keep going without you. That's the part I can't fix with medicine. --- I don't know why I'm writing this. Maybe because I need to process it. Maybe because someone else needs to hear it. Maybe both. Either way, that's where I'm at tonight. Thinking about that family thanking me when I felt like I should be thanking them. Thinking about how fragile all of this is. Thinking about whether I'm making the most of the time I have. Heavy stuff. But that's the job sometimes.