Faits :
A.
A._ Sàrl, dont l'associé gérant est C._, a notamment pour but le nettoyage général de bâtiments et autres. Depuis 2009, cette société a pu compter sur la collaboration de B._, sans que celle-ci ne fasse l'objet d'un contrat écrit. A._ Sàrl avait remis à B._ un véhicule d'entreprise et des outils de travail; elle lui transmettait les adresses des clients auprès desquels des nettoyages devaient être effectués. B._ établissait des factures mensuelles; il était payé de main à main et, dans les derniers mois de la collaboration, il prenait le montant dû, contre signature d'une quittance, sur l'escalier de la maison de C._.
A la suite d'un contrôle d'employeur, la SUVA a exigé en décembre 2013 de A._ Sàrl le rattrapage des primes de 2009 à 2012 sur les montants versés à B._. Sur opposition de A._ Sàrl, la SUVA a confirmé en juillet 2014 le statut de salarié de B._ en droit des assurances sociales et les cotisations dues à ce titre.
En janvier 2014, la caisse de compensation AVS à laquelle A._ Sàrl est affiliée a également fait parvenir à cette dernière des décomptes rectificatifs et d'intérêts moratoires.
Le 14 février 2014, C._ et B._ ont eu par téléphone un différend au sujet du contrat de travail écrit préparé par A._ Sàrl. A cette occasion, B._ s'est emporté et a décidé de cesser toute activité pour l'entreprise de nettoyage, restituant le véhicule et le matériel. Lorsqu'il lui a proposé de le réintégrer, C._ s'est heurté à un refus catégorique de l'intéressé.
Le 30 mars 2014, B._ a indiqué à A._ Sàrl les heures effectuées en février et demandé que le montant correspondant à ces heures soit remis pour solde de tout compte à sa compagne d'alors, qui travaillait également pour l'entreprise de nettoyage.
Seize mois plus tard, B._ a réclamé à C._ un montant de 22'821 fr.30 correspondant aux salaires de janvier à avril 2014 et au prorata du 13ème salaire, après déduction des charges sociales. A._ Sàrl n'est pas entrée en matière sur cette demande.
B.
Après l'échec de la tentative de conciliation, B._ a déposé, le 19 février 2016, une demande contre A._ Sàrl devant le Tribunal civil des Montagnes et du Val-de-Ruz; il concluait au paiement d'un montant net de 22'800 fr.
Par jugement du 15 mai 2018, le tribunal a entièrement rejeté la demande. Après avoir qualifié les rapports juridiques entre les parties de contrat de travail, le juge a conclu que les parties avaient, à une date indéterminée entre le 1 eret le 14 février 2014, convenu de mettre un terme aux rapports contractuels avec effet immédiat. Il a jugé ensuite sans fondement les prétentions salariales du 1 er janvier 2014 jusqu'à la fin du contrat en février 2014, en raison du comportement de l'employé démontrant que, de son point de vue, "le passé était réglé".
Statuant le 8 octobre 2018 sur appel de B._ et appel joint de A._ Sàrl, la Cour d'appel civile du Tribunal cantonal du canton de Neuchâtel a déclaré irrecevable l'appel joint, admis partiellement l'appel principal et condamné A._ Sàrl à verser à B._ un montant net de 10'325 fr. La cour cantonale a confirmé que les parties étaient liées par un contrat de travail. En revanche, elle a exclu l'existence d'un accord de résiliation immédiate et retenu que c'était B._ qui avait mis fin aux rapports de travail par une résiliation avec effet immédiat à la suite de l'entretien téléphonique du 14 février 2014. Elle a jugé que l'employé disposait d'un juste motif pour résilier sur-le-champ le contrat de travail, dès lors que le contrat écrit soumis par l'employeur prévoyait une diminution conséquente tant du salaire horaire que du taux d'activité. Fondé sur l'art. 337b al. 1 CO, B._ pouvait ainsi prétendre à une indemnisation correspondant à son salaire pendant la durée du délai de congé légal, soit du 14 février 2014 au 30 avril 2014. A l'instar du juge de première instance, la cour cantonale a par ailleurs tenu pour établi que B._ avait reçu la rémunération convenue pour la période de janvier 2014 à la fin des rapports de travail.
C.
A._ Sàrl interjette un recours en matière civile, concluant principalement au rejet de toutes les conclusions de la demande.
B._ propose le rejet du recours.
La recourante a déposé une réplique, suivie d'ultimes observations de l'intimé.
Pour sa part, la cour cantonale se réfère aux considérants de son arrêt.

Considérant en droit :
1.
Le recours est dirigé contre un arrêt final (art. 90 LTF) rendu en matière civile (art. 72 al. 1 LTF) par le tribunal supérieur institué comme autorité cantonale de dernière instance, lequel a statué sur recours (art. 75 LTF). La cause atteint la valeur litigieuse de 15'000 fr. ouvrant le recours en matière civile dans les affaires relevant du droit du travail (art. 74 al. 1 let. a LTF). La recourante, dont les conclusions libératoires ont été rejetées, a la qualité pour recourir (art. 76 al. 1 LTF). Déposé dans le délai (art. 100 al. 1 LTF) et la forme (art. 42 LTF) prévus par la loi, le recours est en principe recevable, sous réserve de l'examen des griefs particuliers.
2.
2.1. Le recours en matière civile peut être exercé pour violation du droit fédéral (art. 95 let. a LTF), y compris le droit constitutionnel (<ref-ruling> consid. 2.1 p. 247; <ref-ruling> consid. 2.4 p. 313). Le Tribunal fédéral applique le droit d'office (art. 106 al. 1 LTF). Il n'est donc limité ni par les arguments soulevés dans le recours, ni par la motivation retenue par l'autorité précédente; il peut admettre un recours pour un autre motif que ceux qui ont été invoqués et il peut rejeter un recours en adoptant une argumentation différente de celle de l'autorité précédente (<ref-ruling> consid. 2 p. 89; <ref-ruling> consid. 1.3 p. 336; <ref-ruling> consid. 1.4; <ref-ruling> consid. 1.4 p. 400). Compte tenu de l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (art. 108 al. 1 let. b LTF), le Tribunal fédéral n'examine en principe que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes. Il n'est pas tenu de traiter, comme le ferait une autorité de première instance, toutes les questions juridiques qui se posent, lorsque celles-ci ne sont plus discutées devant lui (<ref-ruling> consid. 2, 115 consid. 2; <ref-ruling> consid. 1.3). Par exception à la règle selon laquelle il applique le droit d'office, il n'examine la violation d'un droit constitutionnel que si le grief a été invoqué et motivé de façon détaillée (art. 106 al. 2 LTF; <ref-ruling> consid. 2.3; <ref-ruling> consid. 1.3; <ref-ruling> consid. 1.4 in fine).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (art. 105 al. 1 LTF). Il ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles sont manifestement inexactes ou découlent d'une violation du droit au sens de l'art. 95 LTF (art. 105 al. 2 LTF). "Manifestement inexactes" signifie ici "arbitraires" (<ref-ruling> consid. 1.3.1 p. 253; <ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5). Encore faut-il que la correction du vice soit susceptible d'influer sur le sort de la cause (art. 97 al. 1 LTF).
La critique de l'état de fait retenu est soumise au principe strict de l'allégation énoncé par l'art. 106 al. 2 LTF (<ref-ruling> consid. 2.3 p. 266 et les références). La partie qui entend attaquer les faits constatés par l'autorité précédente doit expliquer clairement et de manière circonstanciée en quoi les conditions précitées seraient réalisées (<ref-ruling> consid. 1.3.1 p. 18 et les références). Si elle souhaite obtenir un complètement de l'état de fait, elle doit aussi démontrer, par des renvois précis aux pièces du dossier, qu'elle a présenté aux autorités précédentes en conformité avec les règles de procédure les faits juridiquement pertinents à cet égard et les moyens de preuve adéquats (<ref-ruling> consid. 2 p. 90). Si la critique ne satisfait pas à ces exigences, les allégations relatives à un état de fait qui s'écarterait de celui de la décision attaquée ne pourront pas être prises en considération (<ref-ruling> consid. 1.3.1 p. 18). Aucun fait nouveau ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente (art. 99 al. 1 LTF).
3.
A ce stade, il n'est plus contesté que les parties étaient liées, depuis 2009, par un contrat de travail (oral) de durée indéterminée, que l'employé a résilié avec effet immédiat en date du 14 février 2014.
La recourante se plaint d'une violation de l'art. 337 CO. Selon elle, l'intimé ne disposait pas d'un juste motif lui permettant de mettre sur-le-champ un terme au contrat de travail et de prétendre ainsi être indemnisé sur la base de l'art. 337b CO.
3.1. L'art. 337 CO autorise l'employeur comme le travailleur à résilier immédiatement le contrat en tout temps pour de justes motifs (al. 1). Sont notamment considérés comme de justes motifs toutes les circonstances qui, selon les règles de la bonne foi, ne permettent pas d'exiger de celui qui a donné le congé la continuation des rapports de travail (al. 2).
Selon la jurisprudence, la résiliation immédiate pour justes motifs est une mesure exceptionnelle qui doit être admise de manière restrictive (<ref-ruling> consid. 2.1.1 p. 304). Seul un manquement particulièrement grave peut justifier une telle mesure (<ref-ruling> consid. 4.2). Par manquement, on entend généralement la violation d'une obligation découlant du contrat de travail, mais d'autres incidents peuvent aussi justifier une telle mesure (<ref-ruling> consid. 2.1.1; <ref-ruling> consid. 4.1; <ref-ruling> consid. 2.2). L'élément en cause doit être objectivement propre à détruire le rapport de confiance essentiel au contrat de travail ou, du moins, à l'atteindre si profondément que la continuation des rapports de travail ne peut raisonnablement pas être exigée; de surcroît, il doit avoir effectivement abouti à un tel résultat (<ref-ruling> consid. 4.2 et les arrêts cités). Le juge apprécie librement, selon les règles du droit et de l'équité (art. 4 CC), si la résiliation immédiate répond à de justes motifs (art. 337 al. 3 CO). Il prendra en considération toutes les circonstances du cas particulier et sa décision, rendue en vertu d'un pouvoir d'appréciation, ne sera revue qu'avec réserve par le Tribunal fédéral (entre autres, ATF <ref-ruling> consid. 4.1 p. 32).
Lorsque - comme c'est le cas en l'occurrence - la résiliation immédiate intervient à l'initiative du travailleur, le Tribunal fédéral a admis l'existence de justes motifs notamment en cas d'atteinte grave aux droits de la personnalité de l'employé, consistant par exemple dans une modification unilatérale ou inattendue de son statut qui n'est liée ni à des besoins de l'entreprise, ni à l'organisation du travail, ni à des manquements de sa part; il en est ainsi en cas de retrait d'une procuration non justifié par l'attitude du travailleur (arrêts 4A_132/2009 du 18 mai 2009 consid. 3.1.1; 4C.119/2002 du 20 juin 2002 consid. 2.2; 4C.240/2000 du 2 février 2001 consid. 3b/aa), en cas d'une attribution de tâches contraire aux assurances que l'employeur venait de fournir à l'employée concernant son statut dans l'entreprise (arrêt C.426/1985 du 25 novembre 1985 consid. 2b) ou encore en cas de retrait sans nécessité à un courtier d'un important portefeuille représentant environ 25% des primes d'assurance produites par les affaires confiées (arrêt précité 4A_132/2009 consid. 3.1.2).
3.2. Selon l'arrêt attaqué, le motif de la résiliation immédiate du contrat par l'intimé réside dans le "différend au sujet du statut de l'employé", ce dernier s'étant emporté lors de l'altercation du 14 février 2014 et ayant décidé de cesser immédiatement de travailler pour la recourante. La cour cantonale précise plus loin que la résiliation a été "donnée en réaction au contrat de travail écrit voulu" par l'employeuse. Ces constatations de fait sur le motif du congé lient le Tribunal fédéral (<ref-ruling> consid. 2.3 p. 515 et les arrêts cités).
La Cour d'appel civile a examiné ensuite si "un tel contrat de travail pouvait valablement être imposé au travailleur". Elle a relevé à cet égard que "la modification voulue par l'employeur [tenait] à la soumission de [l'intimé] à un contrat de travail écrit, le faisant passer du statut de «sous-traitant indépendant» à celui de salarié" et que "le contrat de travail écrit proposé par [la recourante]" induisait une diminution significative du revenu de l'intimé, "ce qui constitu[ait] clairement une modification unilatérale du contrat de travail". Selon l'arrêt entrepris, la soumission à un contrat de travail écrit était justifiée par la bonne marche de l'entreprise, dès lors que celle-ci avait eu à rattraper les cotisations sociales dues pour l'intimé à la suite de l'intervention de la SUVA et de la caisse de compensation AVS. Cependant, l'adaptation s'accompagnait d'une diminution significative du revenu de l'intimé - lequel passait d'environ 4'000 fr. mensuels en moyenne à moins de 2'500 fr. en tenant compte de la part du treizième salaire -, "conséquence de la baisse du salaire horaire ainsi que des horaires de travail diminués et imposés, tels que prévus dans le contrat rédigé par la [recourante]". L'autorité précédente conclut qu'"en tant qu'elle dépassait la simple adaptation répondant à une nécessité de l'entreprise, cette modification, unilatérale et inattendue, ne pouvait valablement être imposée à l'employé", qui disposait dès lors d'un juste motif pour mettre fin aux rapports de travail avec effet immédiat.
3.3. Il résulte des faits souverainement établis par la cour cantonale que, depuis le début de leurs relations contractuelles, les parties considéraient - à tort - que l'intimé oeuvrait comme un sous-traitant indépendant; aucune charge sociale n'a été prélevée sur la rémunération ni payée en rapport avec celle-ci, étant précisé que l'intimé était affilié à la caisse de compensation AVS du canton de Fribourg en qualité de personne sans activité lucrative (complètement des faits sur la base du jugement de première instance); le contrat oral liant les parties prévoyait alors une rétribution de 30 fr. par heure; le taux d'activité de l'intimé était d'environ 80%. A la suite des rattrapages ordonnés par la SUVA et la caisse de compensation AVS, il était clair que l'intimé exerçait une activité dépendante; son statut dans l'entreprise de la recourante devait ainsi être régularisé, ce qui supposait pratiquement l'établissement d'un contrat de travail écrit. Dans cette perspective, la recourante a soumis à l'intimé un contrat écrit, lequel se référait expressément à la convention collective de travail pour le secteur du nettoyage pour la Suisse romande et prévoyait un salaire horaire de 23 fr. ainsi qu'un taux d'activité d'environ 70% selon des horaires fixes, et non plus variables. Il ne s'agissait pas simplement de mettre par écrit la teneur du contrat oral, en précisant les déductions liées aux assurances sociales, mais bien de modifier le contrat notamment sur l'élément essentiel du montant de la rémunération. Le contrat rédigé par la recourante constituait ainsi une offre de contracter, soumise à l'assentiment de l'intimé. La situation ici en cause est donc différente de celles décrites dans la jurisprudence en rapport avec une modification unilatérale du statut du travailleur dans le cadre des rapports de travail existants (cf. consid. 3.1 supra).
L'intimé a refusé de signer le contrat proposé, se disputant à ce sujet avec l'associé gérant de la recourante et, dans la foulée, résiliant le contrat de travail oral avec effet immédiat.
La question est de savoir si, dans les circonstances de l'espèce, l'intimé était légitimé à mettre un terme sur-le-champ aux rapports contractuels, "en réaction" au contrat proposé par la recourante comme l'écrit la cour cantonale. Indépendamment de la date à laquelle l'intimé a pris connaissance du projet et, partant, de son temps de réaction qualifié de trop important par la recourante, il convient de se demander dans quelle mesure la proposition de contrat écrit touchait à la relation de confiance entre les parties. La cour cantonale met en avant le point de vue subjectif de l'intimé, qui a déclaré devant le premier juge avoir refusé la proposition de la recourante de reprendre le travail après l'altercation du 14 février 2014 parce que "[l]a confiance était rompue". Or, pour constituer un juste motif de résiliation, l'atteinte à la relation de confiance doit également être grave objectivement. Et, en l'occurrence, force est de conclure que tel n'est pas le cas. L'intimé demeurait libre d'accepter ou non l'offre de la recourante, son statut n'étant pas modifié unilatéralement par cette dernière contrairement à ce que la cour cantonale a admis. Faute d'accord, les conditions du contrat oral, en particulier la rémunération par heure, restaient en vigueur. Face au refus de l'intimé, la balle était dans le camp de la recourante, qui pouvait reprendre la négociation ou résilier le contrat dans le délai légal ordinaire, par un congé-modification au sens large. Mais, en tant que tel, le fait de soumettre au collaborateur l'offre susmentionnée, dans le cadre du processus de régularisation de son statut contractuel, n'était pas, objectivement, une circonstance propre à rompre ou, en tout cas, à atteindre le rapport de confiance devant exister entre les parties, au point que l'intimé ne pouvait plus, du jour au lendemain, raisonnablement fournir sa prestation à la recourante. C'est le lieu de rappeler le caractère exceptionnel de la résiliation immédiate pour justes motifs, admise de manière restrictive qu'elle émane de l'employeur ou du travailleur.
En considérant que, dans les circonstances du cas particulier, l'intimé était légitimé à mettre un terme sans délai au contrat liant les parties, la cour cantonale a abusé du pouvoir d'appréciation que l'art. 337 al. 1 CO lui confère. Il s'ensuit que l'intimé ne dispose pas envers la recourante d'une prétention déduite d'une résiliation justifiée au sens de l'art. 337b CO.
3.4. Comme le grief tiré d'une violation de l'art. 337 CO est fondé, les autres moyens du recours liés à l'arbitraire dans l'établissement des faits, à la violation de l'art. 247 al. 2 CPC et à la violation de l'art. 337b al. 1 CO n'ont plus d'objet.
Sur le vu de ce qui précède, le recours doit être admis, ce qui conduit à l'annulation de l'arrêt attaqué et au rejet de la demande de l'intimé.
4.
L'intimé, qui succombe, prendra à sa charge les frais judiciaires (art. 66 al. 1 LTF), fixés selon le tarif réduit étant donné la valeur litigieuse ici en cause (art. 65 al. 4 let. c LTF). En outre, il versera des dépens à la recourante (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est admis et l'arrêt attaqué est annulé.
La demande en paiement de B._ contre A._ Sàrl est rejetée.
2.
La cause est renvoyée à la cour cantonale pour nouvelle décision sur les dépens de la procédure cantonale.
3.
Les frais judiciaires, arrêtés à 500 fr., sont mis à la charge de l'intimé.
4.
L'intimé versera à la recourante une indemnité de 2'000 fr. à titre de dépens.
5.
Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Neuchâtel.
Lausanne, le 22 janvier 2020
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann