Faits :
A.
Le 3 novembre 2020, sur requête de B._ SA, l'Office cantonal des poursuites du canton de Genève a notifié à A._ SA un commandement de payer (poursuite n° xx xxxxxx x) pour la somme de 13'967 fr. 30, avec intérêts à 5% dès le 21 juin 2020.
La poursuivie a formé opposition totale.
Par jugement du 26 mars 2021, le Tribunal de première instance de Genève a prononcé la mainlevée provisoire de l'opposition formée au commandement de payer.
Par arrêt du 25 juin 2021, communiqué aux parties par plis recommandés du 5 juillet 2021, la Cour de justice du canton de Genève a rejeté le recours formé par A._ SA contre ce prononcé.
B.
Par écriture du 2 septembre 2021, A._ SA interjette un recours en matière civile et un recours constitutionnel subsidiaire au Tribunal fédéral. Elle conclut principalement à l'annulation de l'arrêt querellé et du jugement de première instance, à la constatation de l'absence de titre de mainlevée au sens de l'<ref-law> et, en conséquence, au rejet de la requête de mainlevée. À titre subsidiaire, elle demande l'annulation de l'arrêt querellé et du jugement de première instance et le renvoi de la cause à l'instance inférieure pour nouvelle décision.
Des déterminations n'ont pas été requises.

Considérant en droit :
1.
1.1. Le choix entre le recours en matière civile et le recours constitutionnel subsidiaire dépend de la nature de l'affaire et, si celle-ci est - comme en l'occurrence - de nature pécuniaire, de la valeur litigieuse (<ref-ruling> consid. 3.1).
1.2. La recourante relève à juste titre que la valeur litigieuse est inférieure au seuil de 30'000 fr., de sorte que le recours en matière civile n'est pas recevable au regard de l'<ref-law>. Elle soutient toutefois que celui-ci serait ouvert du chef de l'<ref-law>, car il soulèverait la " question de principe " de savoir si un devis, accepté et signé, a valeur de reconnaissance de dette et constitue ainsi un titre de mainlevée provisoire au sens de l'<ref-law>.
D'après la jurisprudence, la cause soulève une " question juridique de principe " - notion qui doit être interprétée très restrictivement (<ref-ruling> consid. 1.4; <ref-ruling> consid. 1.1.2; <ref-ruling> consid. 1.1, avec les références) - lorsqu'il est nécessaire, pour résoudre le cas concret, de trancher une question juridique qui donne lieu à une incertitude caractérisée, laquelle appelle de façon pressante un éclaircissement de la part du Tribunal fédéral, en qualité d'autorité judiciaire suprême chargée de dégager une interprétation uniforme du droit fédéral (<ref-ruling> consid. 1.2; <ref-ruling> consid. 1.2 et 209 consid. 1.2). Une nouvelle question juridique peut ainsi être tranchée par le Tribunal fédéral lorsque cette décision est propre à orienter la pratique, soit lorsque les instances inférieures sont appelées à trancher de nombreux cas similaires (<ref-ruling> consid. 1.3; <ref-ruling> consid. 1.3). Il y a également lieu d'examiner s'il est probable ou non que la question litigieuse puisse un jour être présentée avec une valeur litigieuse suffisante pour ouvrir la voie du recours en matière civile (<ref-ruling> consid. 1.2, 267 consid. 1.2.3). Si le point soulevé ne concerne que l'application de principes jurisprudentiels à un cas particulier, il ne saurait être qualifié de question juridique de principe (<ref-ruling> consid. 1.4.1).
La partie recourante doit démontrer, sous peine d'irrecevabilité, que la décision attaquée soulève une telle question, à moins que celle-ci s'impose de façon évidente (art. 42 al. 2 2ème phrase LTF; <ref-ruling> consid. 1.2; <ref-ruling> consid. 1.3).
1.3. En l'occurrence, la recourante se limite à indiquer que la question qu'elle soulève réclamerait un éclaircissement de manière pressante dès lors que ce cas de figure était appelé à se présenter de très nombreuses fois, elle-même étant amenée dans le cadre son activité à signer de nombreux devis. Cette brève allégation ne remplit manifestement pas les exigences de motivation, la recourante ne soutenant du reste pas - ni a fortiori ne démontrant - que cette question donnerait lieu à une incertitude caractérisée, étant relevé de surcroît que la recourante ne prétend nullement que la problématique ne pourrait pas se présenter à nouveau dans une affaire dont la valeur litigieuse atteindrait le seuil requis. Partant, le présent recours est irrecevable en tant que recours en matière civile.
1.4. Seule reste ouverte la voie du recours constitutionnel subsidiaire (<ref-law>). Le recours a été déposé à temps (art. 46 al. 1 let. b; art. 100 al. 1, par renvoi de l'<ref-law>) contre une décision finale (art. 90, par renvoi de l'<ref-law>) prise sur recours par une autorité cantonale de dernière instance (art. 75 al. 1 et 2, par renvoi de l'<ref-law>); la recourante, qui a succombé devant l'autorité précédente, a en outre qualité pour recourir (<ref-law>). Le recours constitutionnel subsidiaire est dès lors recevable.
2.
2.1. Le recours constitutionnel ne pouvant être formé que pour violation des droits constitutionnels (<ref-law>), le Tribunal fédéral ne corrige l'application des dispositions de droit matériel que si celle-ci est arbitraire au sens de l'art. 9 Cst. Tel est le cas lorsqu'elle viole gravement une norme ou un principe juridique clair et indiscuté, ou contredit de manière choquante le sentiment de la justice et de l'équité. Une motivation n'est pas arbitraire du seul fait qu'une autre solution que celle de l'autorité cantonale apparaît concevable ou même préférable (<ref-ruling> consid. 7.3; <ref-ruling> consid. 2.1). Pour être qualifiée d'arbitraire, la décision doit également être insoutenable dans son résultat (<ref-ruling> consid. 7.1, 170 consid. 7.3; <ref-ruling> consid. 4.3). Le Tribunal fédéral n'examine en outre que les griefs expressément soulevés et motivés de façon claire et détaillée par le recourant (" principe d'allégation "; art. 106 al. 2 et 117 LTF; <ref-ruling> consid. 1.5 et les références).
En l'occurrence, le grief de violation de l'<ref-law> est d'emblée irrecevable, dès lors que la recourante n'invoque pas la violation d'un droit constitutionnel dans l'application de cette disposition.
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut rectifier ces constatations que si les faits ont été établis en violation de droits constitutionnels (<ref-law> en relation avec l'<ref-law>), soit en particulier s'ils ont été établis de manière arbitraire (art. 9 Cst.), ce qui correspond à la notion de " manifestement inexacte " figurant à l'<ref-law> (<ref-ruling> consid. 6.7; <ref-ruling> consid. 2.2 et la référence). La critique de l'état de fait retenu est soumise au principe strict de l'allégation (art. 106 al. 2 et 117 LTF; cf. supra consid. 2.1).
2.3. En vertu du principe de l'épuisement des griefs, le recours n'est ouvert qu'à l'encontre des décisions rendues par une autorité cantonale de dernière instance (<ref-law>), ce qui signifie que les voies de droit cantonales doivent avoir été non seulement utilisées sur le plan formel, mais aussi épuisées sur le plan matériel (<ref-ruling> consid. 3.3.4; <ref-ruling> consid. 2.2.2; <ref-ruling> consid. 1.1 et les références). Lorsque l'autorité de dernière instance cantonale peut se limiter à examiner les griefs régulièrement soulevés, le principe de l'épuisement matériel veut que les griefs soumis au Tribunal fédéral aient déjà été invoqués devant l'instance précédente (arrêt 4A_40/2021 du 10 juin 2021 consid. 3.2 et les arrêts cités, publié in SJ 2021 I p. 451).
3.
Dans la partie " recevabilité " de l'arrêt querellé, la cour cantonale a retenu que la pièce 6 produite par la poursuivie, de même que les pièces 6 à 8 produites par la poursuivante, étaient nouvelles et partant irrecevables. Il en allait de même des allégués de fait relatifs à ces titres. Sur le fond, il ressort de l'arrêt querellé que la poursuivante avait produit un devis qu'elle avait établi le 2 décembre 2019, sur papier entête de la société et signé par C._, portant sur des travaux d'un montant total de 24'501 fr. 75. Ce devis avait ensuite été signé par la poursuivie à côté du timbre humide de l'entreprise, précisant qu'elle donnait son accord aux mêmes conditions que les travaux effectués sur la villa A. La poursuivie avait transmis ledit devis contresigné par courriel à la poursuivante. Elle avait par ailleurs payé l'acompte de 9'311 fr. 52 que lui avait adressé la poursuivante le 11 décembre 2019. Sur la base de ces éléments, la cour cantonale a considéré que le devis, accepté et signé, valait reconnaissance de dette, la poursuivante s'étant engagée, sans réserve ni condition, à verser une somme déterminée pour les travaux qu'elle avait commandés. Elle a relevé de plus que la poursuivie n'avait pas contesté que les travaux commandés avaient été exécutés. Celle-ci se bornait à soutenir que les travaux étaient entachés de défauts, ce qu'elle ne rendait toutefois pas vraisemblable, les allégués nouveaux et les pièces nouvellement produites étant à cet égard irrecevables car tardifs. Au surplus, la poursuivante n'avait fait valoir aucun moyen libératoire.
4.
4.1. Soulevant un grief d'arbitraire dans l'établissement des faits (art. 9 Cst.), la recourante reproche à la cour cantonale d'avoir écarté son argumentaire et d'avoir retenu que la mauvaise exécution serait un allégué nouveau, le premier juge n'ayant même pas pris la peine de résumer succinctement les éléments plaidés, de part et d'autre, dans le cadre de la procédure sommaire. Il ressortait de sa plaidoirie que la prestation convenue n'avait pas été exécutée, vu que l'intimée aurait dû procéder au retrait des garde-corps et remplacer ceux-ci par de nouveaux d'une hauteur convenable. Elle avait ainsi allégué la non-exécution de la prestation convenue, ce qui était suffisant au niveau de la procédure de mainlevée. La cour cantonale s'était dès lors arbitrairement écartée de cet état de fait en proclamant qu'il s'agissait là d'un nouvel allégué. La recourante relève également que la partie intimée avait allégué dans sa réponse du 14 mai 2021 devant l'autorité cantonale que le propriétaire de la maison n'avait pas désiré le remplacement des deux verres présentant une différence de hauteur, celle-ci ayant ensuite affirmé sur cette base que la prestation avait livrée, réceptionnée et acceptée. Or, la cour cantonale avait ignoré de manière arbitraire ces allégations de l'intimée, qui avait admis l'existence d'un problème d'exécution, et avait ainsi renversé le fardeau de la preuve.
4.2. En tant qu'elle fait valoir que les allégations formulées par l'intimée dans la procédure de recours devant la juridiction précédente ont été arbitrairement ignorées, la recourante perd de vue que la cour cantonale a déclaré irrecevable les allégués de la réponse qui sont en lien avec les titres 6 à 8 et que l'intimée avait offert de prouver par le titre 7 les allégations auxquelles la recourante se réfère.
Au surplus, la recourante fonde entièrement sa critique sur des faits qu'elle affirme avoir allégués oralement devant le Tribunal de première instance. Le procès-verbal servant de base à l'établissement des allégations des parties présentées oralement en audience, il n'est pas établi, en l'absence de leur consignation, que les faits sur lesquels la recourante base son argumentation ont été allégués, privant ainsi celle-ci de tout fondement. Il est vrai que l'omission du premier juge de consigner les points essentiels soulevés au cours de l'audience en présence des parties paraît problématique, au regard de l'obligation de tenir un procès-verbal qui découle du droit d'être entendu garanti à l'art. 29 al. 2 Cst. (<ref-ruling> consid. 8.2; <ref-ruling> consid. 4.1; <ref-ruling> consid. 3a et 4a) et qui est concrétisé en procédure civile par l'<ref-law>, cette disposition prévoyant notamment que les allégués des parties qui ne se trouvent pas dans leurs actes écrits doivent y être consignés dans leur substance (<ref-law>). Cependant, il n'apparaît pas - et la recourante ne le prétend pas - que celle-ci se soit prévalue du caractère lacunaire du procès-verbal devant la cour cantonale; toute critique à cet égard formulée pour la première fois devant le Tribunal fédéral est ainsi irrecevable (cf. supra consid. 2.3), étant en outre relevé qu'il appartient aux parties, à tout le moins lorsque celles-ci sont assistées par un avocat, de veiller à ce que la substance de leurs allégués soit retranscrite au procès-verbal (arrêt 4A_238/2015 du 22 septembre 2015 consid. 2.3).
S'agissant de l'affirmation de la recourante selon laquelle l'allégation d'une non-exécution de la prestation serait suffisante au niveau de la procédure de mainlevée, il y a lieu par ailleurs de rappeler que le Tribunal fédéral a jugé que la simple allégation de l'inexécution par le poursuivi déclenche pour le poursuivant l'obligation d'apporter cette preuve; en effet, cette question ne ressortit pas à un moyen libératoire mais relève de la contestation de l'exigibilité, soit d'une exigence mise à l'admission d'un contrat bilatéral comme titre de mainlevée provisoire dont il incombe au poursuivant de justifier qu'il en dispose effectivement. Il a en revanche laissé ouverte la question de savoir si, comme c'est le cas pour l'inexécution au sens strict, le seul fait pour le poursuivi de se prévaloir d'une exécution qualitativement défectueuse, comme l'invoque en l'espèce la recourante, suffit pour imposer au poursuivant de prouver son exécution conforme en tous points au contrat (<ref-ruling> consid. 4.3.2; arrêt 5A_65/2020 précité consid. 5.2.2). En l'occurrence, il n'y a pas lieu d'examiner si la cour cantonale a considéré à juste titre que la recourante devait rendre vraisemblable que les travaux étaient défectueux, celle-ci ne formulant aucune critique en droit à cet égard et se limitant à soulever un grief d'arbitraire dans l'établissement des faits.
Autant que recevable, ce grief doit ainsi être rejeté.
5.
5.1. Dans une argumentation qui se recoupe avec celle exposée ci-dessus (cf. supra consid. 4.1), la recourante se plaint de violations de son droit d'être entendue (art. 29 al. 2 Cst.) et de son droit à un procès équitable (art. 30 Cst.). Elle relève avoir pu exercer son droit d'être entendue devant le premier juge dans le cadre de sa plaidoirie et qu'il s'agissait, en vertu du droit procédural, de la seule possibilité de faire valoir son point de vue, dès lors que le premier juge n'avait pas ordonné l'ouverture d'une procédure écrite. Elle avait exposé lors de cette plaidoirie que les travaux avaient été mal exécutés, en indiquant notamment que les garde-corps commandés ne respectaient pas la hauteur convenue et les prescriptions légales. Contre toute attente toutefois, la cour cantonale, bien que relevant que le contenu de la plaidoirie n'avait pas été retranscrit dans le procès-verbal, avait estimé qu'il s'agissait là d'une allégation nouvelle, partant, irrecevable. Cette assertion ne reposait sur aucun fondement dès lors que le dossier ne contenait aucun enregistrement de son argumentaire et de ses allégations. Elle réduisait à néant sa plaidoirie et violait ainsi son droit d'être entendue, rendant toute défense vaine. En tous les cas, l'arrêt querellé avait refusé d'entrer en matière sur le défaut de hauteur qu'elle avait invoqué, proclamant sans fondement qu'il s'agissait là d'un allégué nouveau qui devait être rejeté.
5.2. On ne comprend pas, à la lecture du grief, en quoi le droit d'être entendue et celui à un procès équitable de la recourante auraient été violés, étant donné que la cour cantonale a pris en compte son argument selon lequel les travaux étaient entachés de défauts, mais l'a écarté au motif que ce fait n'était pas établi. Savoir si la cour cantonale a ignoré des faits que la recourante avait allégués lors de la procédure de première instance est une question qui relève de l'établissement des faits et il a été dit (cf. supra consid. 4.2) que la critique de la recourante sur cette question était infondée. Partant, autant que recevables, les griefs tirés de la violation des art. 29 al. 2 et 30 Cst. doivent être rejetés.
6.
En conclusion, le recours doit être rejeté, dans la mesure de sa recevabilité. La recourante, qui succombe, supportera dès lors les frais judiciaires (<ref-law>). Il n'y a pas lieu d'allouer de dépens à l'intimée, qui n'a pas été invitée à se déterminer.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais judiciaires, arrêtés à 1'500 fr., sont mis à la charge de la recourante.
3.
Le présent arrêt est communiqué aux parties et à la Chambre civile de la Cour de justice du canton de Genève.
Lausanne, le 1er mars 2022
Au nom de la IIe Cour de droit civil
du Tribunal fédéral suisse
Le Président : Herrmann
Le Greffier : Piccinin