Skip to content

Conversation

@frederikschubertflex
Copy link
Contributor

While codespell check works for common typos, it is not sufficient to catch all errors. This PR adds the vocabulary-based pyspellchecker to the spellcheck.py script and integrates it with the existing approach.

Running it on PlasmonicPhotothermalHeating results in this output:

Spell Check Report

PlasmonicPhotothermalHeating.ipynb (codespell):

372: "Before submitting our simulation to the server, it is a crucial best practice to visualize the setup. This allows us to confirm that all components—including the geometry, material properties, sources, monitors, and boundary conditions—are positioned and defined as intended. Tidy3D's built-in plotting methods provide a quick and easy way to inspect the simulation layout in 2D or 3D. Given the simplicity of the geometries employed in this example, we only show 2D plots. To employ 3D plots within the notebook, see [`plot_3D`](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.Simulation.html#tidy3d.Simulation.plot_3d) . For Tidy3D advanced visualization capabilites see the [GUI tutorial](https://www.flexcompute.com/tidy3d/learning-center/tidy3d-gui/)."
        capabilites ==> capabilities

PlasmonicPhotothermalHeating.ipynb (pyspellchecker):

Cell 1, Line 1: 'plasmonic', 'nanoparticles', 'photothermal'
  > # Plasmonic photothermal heating of gold nanoparticles
Cell 1, Line 3: 'flexcredit'
  > Note: the cost of running the entire notebook is larger than 5 FlexCredit.
Cell 1, Line 5: 'nanoparticles', 'nanoparticle', 'near-infrared', 'nanoscale', 'plasmon', 'plasmonic', 'photothermal'
  > Metallic nanoparticles, particularly those made of gold (Au), have the unique ability to strongly interact with light at specific wavelengths through a phenomenon known as Localized Surface Plasmon Resonance (LSPR). When illuminated at their resonance frequency, these nanoparticles become highly efficient at absorbing light and converting it into heat on the nanoscale. This localized heat generation is the foundation of Plasmonic Photothermal Therapy (PPTT), a technique for applications like selective oncological treatment. By delivering nanoparticles to a target volume (e.g., a tumor) and illuminating them with light (often in the near-infrared, where biological tissue is most transparent), it's possible to induce hyperthermia with high precision, minimizing damage to surrounding healthy tissue. Computational modeling tools, such as Tidy3D, offers a powerful tool for predicting the temperature increase for different nanoparticle shapes, sizes, and arrangements, allowing scientists to rapidly simulate and predict thermal outcomes.
Cell 4, Line 1: 'nanoparticle'
  > # location of the nanoparticle
Cell 4, Line 4: 'nanoparticle'
  > # nanoparticle material
Cell 4, Line 6: 'horiba'
  > water_medium_opt = td.material_library["H2O"]["Horiba"]
Cell 5, Line 2: 'nanorod', 'nanosphere', 'nm'
  > Similarly to the article's simulation settings, we consider a Golden Nanosphere (GNP) with a radius of 68 nm and Golden Nanorod with a radius of 26, 91nm height and 11nm of the radius tip. The surrounding medium is water. A Perfectly matched layer (PML) is imposed at the simulation boundaries.
Cell 7, Line 1: 'nanorods'
  > ## Golden nanorods
Cell 7, Line 6: 'nananorods', 'marged'
  > # building nananorods. One cylinder, two ellipse made out of spheres, marged with union.
Cell 15, Line 1: 'nanoparticle', 'colocate'
  > To calculate the power absorbed by the nanoparticle, we add electric field and a permittivity monitors. These monitors  automatically captures the electric field and material permittivity data needed to compute the local heat source in a subsequent part of the notebook. In the field monitor, `colocate` is set to `False` so that the field data matches with the grid specification of the permittivity monitor (where `colocate` is set to `False` by default).
Cell 18, Line 1: 'mesher', 'non-uniform', 'nanoparticles'
  > We specify an non-uniform meshing strategy to get denser mesher around the nanoparticles. Then, we assemble the complete electromagnetic `td.Simulation` object for both the GNP and the GNR.
Cell 33, Line 7: 'xyz'
  > coords_dict = {dim: coords.get(dim) for dim in "xyz"}
Cell 33, Line 18: 'e-field'
  > # Calculate the squared magnitude for each E-field component.
Cell 33, Line 28: 'e-field'
  > # Compute the power density for each E-field component using the imaginary part of permittivity.
Cell 42, Line 1: 'steady-state'
  > For the model's geometry and thermal properties, we will use the objects that were created at the beginning of the notebook. For a steady-state thermal simulation like this one, the key material properties employed in this simulation are the thermal conductivity (k) and the thermal capacity (cp).
Cell 45, Line 1: 'nanoparticles'
  > # Water sphere surrounding the nanoparticles
Cell 47, Line 1: 'nanorods'
  > # Nanorods
Cell 52, Line 1: 'nanoparticles'
  > To accurately simulate the temperature increase, we must first define the source of the heat. In this case, heat is generated due to electromagnetic power absorption within the nanoparticles. We will explore two models for defining this heat source, allowing us to compare a simplified approximation with a more physically rigorous approach.
Cell 52, Line 6: 'point-wise'
  > By defining both sources, we can directly compare the results of the simplified source against the more detailed point-wise source. Simulating both scenarios will allow us to visually evaluate the impact of the heat source on the final temperature profile.
Cell 66, Line 19: 'temperarature'
  > colorbar_label = "Temperarature C°"
Cell 68, Line 19: 'temperarature'
  > colorbar_label = "Temperarature C°"
Cell 70, Line 1: 'xarray's', 'built-in'
  > Below, we compare visually the temperature data obtained from the two different source models for the GNS and the GNR. The temperature data is obtained through interpolation around the object of interest. Finally, the absolute differences are calculated and plotted using xarray's built-in plotting capabilities.
Cell 71, Line 1: 'numpy'
  > # Create 1D NumPy arrays for the y and z coordinates of the sphere and rod interpolation
Cell 71, Line 11: 'xarray'
  > # Create an xarray.DataArray to hold these 1D coordinates
Cell 71, Line 38: 'temperarature'
  > colorbar_label = "Temperarature difference"
Cell 71, Line 41: 'temperarature'
  > colorbar_label = "Temperarature difference"
Cell 73, Line 1: 'nanostructure's'
  > Our results demonstrate a close agreement with those published in the paper. Also, we compared two models with two different heat sources: a simplified, uniform source based on the average absorbed power density, and a more rigorous, spatially distributed source derived from the spatially varying fields of an electromagnetic simulation. The latest plots highlight that the choice of the heat source model impacts the resulting temperature distribution, and that this impact is highly dependent on the nanostructure's geometry.
Cell 73, Line 3: 'nanoparticle', 'point-wise'
  > For the GNS, a highly symmetric structure, the difference between the two models is not particularly pronounced. In contrast, the results for the GNR display a slightly different temperature distribution when calculated with the point-wise source versus the average absorbed power model. In particular, the peak temperature differs by roughly 5° between the two approaches. This suggests that a spatially distributed source may be preferred when irregular nanoparticle geometries are used.

Checked 1 notebook(s). Found spelling errors in 1 file(s).

Interactive Mode

To extend the vocabulary, you can run the script using ./spellcheck.py PlasmonicPhotothermalHeating.ipynb --interactive. This will guide you through all possible spelling mistakes which can be added to the ignore list.

This is the extended codespellrc file after running through the spelling mistakes.

[codespell]
skip = .git,*.pdf,*.png,*.jpg,*.jpeg,*.gif,*.svg,*.bmp,*.tiff,*.pyc,venv,.venv,.ipynb_checkpoints
check-filenames = true
quiet-level = 2
ignore-words-list = built-in,colocate,Commun,e-field,flexcompute,flexcredit,fom,horiba,mesher,nanoparticle,nanoparticles,nanorod,nanoscale,nanosphere,nanostructure's,near-infrared,nm,non-uniform,numpy,photothermal,plasmon,plasmonic,point-wise,steady-state,te,Thru,tidy3d,TM,xarray,xarray's,xyz
ignore-regex = [a-f0-9]{40}
builtin = clear,rare,informal

Re-running the spell check then results in this output

Spell Check Report

PlasmonicPhotothermalHeating.ipynb (codespell):

372: "Before submitting our simulation to the server, it is a crucial best practice to visualize the setup. This allows us to confirm that all components—including the geometry, material properties, sources, monitors, and boundary conditions—are positioned and defined as intended. Tidy3D's built-in plotting methods provide a quick and easy way to inspect the simulation layout in 2D or 3D. Given the simplicity of the geometries employed in this example, we only show 2D plots. To employ 3D plots within the notebook, see [`plot_3D`](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.Simulation.html#tidy3d.Simulation.plot_3d) . For Tidy3D advanced visualization capabilites see the [GUI tutorial](https://www.flexcompute.com/tidy3d/learning-center/tidy3d-gui/)."
        capabilites ==> capabilities

PlasmonicPhotothermalHeating.ipynb (pyspellchecker):

Cell 7, Line 1: 'nanorods'
  > ## Golden nanorods
Cell 7, Line 6: 'marged', 'nananorods'
  > # building nananorods. One cylinder, two ellipse made out of spheres, marged with union.
Cell 47, Line 1: 'nanorods'
  > # Nanorods
Cell 66, Line 19: 'temperarature'
  > colorbar_label = "Temperarature C°"
Cell 68, Line 19: 'temperarature'
  > colorbar_label = "Temperarature C°"
Cell 71, Line 38: 'temperarature'
  > colorbar_label = "Temperarature difference"
Cell 71, Line 41: 'temperarature'
  > colorbar_label = "Temperarature difference"

Checked 1 notebook(s). Found spelling errors in 1 file(s).

@frederikschubertflex
Copy link
Contributor Author

The file has grown through the new checks and I am thinking about pulling this out into its own proper package. What do you think @yaugenst-flex , @daquinteroflex ?

@yaugenst-flex
Copy link
Contributor

Can pyspellchecker replace codespell or do we need both? Might simplify things.

@frederikschubertflex
Copy link
Contributor Author

I could adapt the code so that pyspellchecker also checks symbols. Right now I have restricted it to comments and left the code part to codespell.

@yaugenst-flex
Copy link
Contributor

I think if it works better then there is no reason to keep codespell around. One thing I appreciated about codespell is that it had a pretty low false positive rate (and a low detection rate overall I guess 😄), the new interactive mode seems useful but everyone will need to know about and run it, which is somewhat error prone. Either way though, I think one tool is better than two.

@frederikschubertflex
Copy link
Contributor Author

Ok! You are right with the interactive mode 😄 It was mainly so that I did not have to add the words manually. But I will also try to remove false positives by cross checking error-candidates with other notebooks. If something is spelled the same way in 2, 3 notebooks it is less likely to be an error I guess.

@frederikschubertflex
Copy link
Contributor Author

frederikschubertflex commented Jun 25, 2025

Spell Check Report

8ChannelDemultiplexer.ipynb:

Cell 29, Line 2: 'verticel'
  > By = 1  # verticel length of the waveguide bend

90OpticalHybrid.ipynb:

Cell 48, Line 1: 'slghtly'
  > Calculate those FOMs and plot the results. Since the signal port is the left waveguide of the bottom MMI, CMRR$_I$ and CMRR$_Q$ are expected to be slghtly different. The device performance according to the insertion loss, CMRR, and Imbalance is comparable to the case with input from the LO port. In addition, from the phase simulation, we know the phase error is going to be small too. This means the overall design of the 90 degree optical hybrid works very well.

AdjointPlugin12LightExtractor.ipynb:

Cell 11, Line 1: 'JaxCutomMedium'
  > Now, we define a function to update the `JaxCutomMedium` using the permittivity distribution. The simulation will include mirror symmetry concerning the `y`-direction, so only the upper half of the design region is returned by this function during the optimization process. To get the whole structure, you need to set `unfold=True`.

AdjointPlugin13Metasurface.ipynb:

Cell 4, Line 13: 'thickess'
  > # thickess of the metalens, enough to apply a relative phase shift of just over pi
Cell 11, Line 38: 'permittiviy'
  > # construct the permittiviy dataset

AdjointPlugin1Intro.ipynb:

Cell 1, Line 83: 'privode'
  > This brings us back to the `adjoint` plugin. The point of the `adjoint` plugin is to extend `jax`'s automatic differentiation capability to allow it to track functions **that involve Tidy3D simulations** in their computational graph. In essence, we privode the "derivative" of the `tidy3d.web.run()` function, using the adjoint method, to tell jax how to differentiate functions that might involve both the setting up and postprocessing of a tidy3d simulation and its data. The end result is a framework where users can set up modeling and optimizations and utilize jax automatic differentiation for optimization and sensitivity analysis efficiently and without needing to derive a single derivative rule.
Cell 18, Line 14: 'JaxSimuation'
  > ### Introducing `JaxSimuation`
Cell 26, Line 3: 'permittivty'
  > Next, we can import the `tidy3d.plugins.adjoint.web.run` function and put all the pieces together into a single function to compute the 0th order transmitted power as a function of `center`, `size`, and `eps` (relative permittivty) of the scatterer.

AdjointPlugin2GradientChecking.ipynb:

Cell 14, Line 23: 'dont'
  > # dont track the gradient through the center of each slab

AdjointPlugin3InverseDesign.ipynb:

Cell 3, Line 11: 'permitivitty'
  > We also apply our built-in smoothening and binarization filters to ensure that the final device has smooth features, and permitivitty values that are all either 1, or the maximum permittivity of the waveguide material.

AllDielectricStructuralColor.ipynb:

Cell 19, Line 3: 'Pos-processing'
  > """Pos-processing function to calculate and return the reflectance peak

AndersonLocalization.ipynb:

Cell 13, Line 7: 'permattivity'
  > eps: td.ScalarFieldDataArray  # Relative permattivity at the Ex positions in the yee lattice

AntennaCharacteristics.ipynb:

Cell 4, Line 8: 'Centeral'
  > freq0 = (freq_start + freq_stop) / 2  # Centeral frequency
Cell 4, Line 12: 'centeral'
  > # Wavelength of centeral frequency in vacuum
Cell 10, Line 9: 'DirectitiviyMonitor'
  > # Define observation parameters used for DirectitiviyMonitor

Autograd13Metasurface.ipynb:

Cell 4, Line 13: 'thickess'
  > # thickess of the metalens, enough to apply a relative phase shift of just over pi
Cell 11, Line 30: 'permittiviy'
  > # construct the permittiviy dataset

Autograd16BilayerCoupler.ipynb:

Cell 9, Line 1: 'dispersiveless'
  > # dispersiveless materials for now. note: can also do `td.Medium.from_nk(n=n, k=k, freq=freq)`

Autograd1Intro.ipynb:

Cell 24, Line 3: 'permittivty'
  > Next, we can import the `tidy3d..web.run` function and put all the pieces together into a single function to compute the 0th order transmitted power as a function of `center`, `size`, and `eps` (relative permittivty) of the scatterer.

Autograd21GaPLightExtractor.ipynb:

Cell 16, Line 10: 'viasualize'
  > # viasualize a simulation

Autograd2GradientChecking.ipynb:

Cell 14, Line 26: 'dont'
  > # dont track the gradient through the center of each slab

Autograd3InverseDesign.ipynb:

Cell 3, Line 11: 'permitivitty'
  > We also apply our built-in smoothening and binarization filters to ensure that the final device has smooth features, and permitivitty values that are all either 1, or the maximum permittivity of the waveguide material.

Autograd9WDM.ipynb:

Cell 16, Line 5: 'staticd'
  > We first define the overall geometry as a `td.Box` and also the number of pixels in x and y staticd on our design region resolution.

BoundaryConditions.ipynb:

Cell 3, Line 2: 'basc'
  > First, we'll define some basc simulation parameters, the size of the domain, and the discretization resolution.

CharacteristicImpedanceCalculator.ipynb:

Cell 42, Line 9: 'Archiv'
  > [4]   R. H. Jansen and M. Kirschning, “Arguments and an accurate Model for the Power-Current Formulation of Microstrip Characteristic Impedance”, Archiv für Elektronik und Übertragungstechnik (AEÜ), vol. 37, pp. 108-112, 1983.

CircularlyPolarizedPatchAntenna.ipynb:

Cell 28, Line 5: 'post-processsing'
  > The radiated fields due to the differential feed configuration can be calculated as a post-processsing step in the `TerminalComponentModeler`, which forms a superposition of the fields with user-defined port amplitudes. However, unlike the single feed case, we need to recompute the radiated power by integrating over a spherical surface. As a result, we need to ensure that the `DirectivityMonitor` samples the electromagnetic field over an entire sphere. In this section, we will use a single `DirectivityMonitor` that will sample both the spatial coordinates and all desired frequency values.

DielectricMetasurfaceAbsorber.ipynb:

Cell 6, Line 2: 'freqeucny'
  > freqs = np.linspace(0.4 * THz, 0.8 * THz, 100)  # freqeucny range of the simulation
Cell 33, Line 9: 'systematicall'
  > # systematicall construct the silicon resonators

DirectionalCouplerSurrogate.ipynb:

Cell 2, Line 5: 'obsvere'
  > Through the machine learning training process, we demonstrate how tidy3d can be used as a data source when training AI models for electromagnetics. We first run a batch of simulations with tidy3d where the two geometric parameters are randomly sampled for each simulation. A mode is injected into one waveguide and monitors on both waveguides characterize the final power split between the two outputs. From this, we define a fitness function describing the performance of a given directional coupler. We define the fitness as the mean squared error between desired output power in each waveguide and actual power. The desired output power fractions are 0.25 and 0.75 in the top and bottom waveguides, respectively. By plotting the fitness function, we can obsvere that we have found a variety of suitable solutions to the coupling problem. We have also collected a significant amount of data that can be used as input to a data driven model of the coupling. We use the broadband simulation data collected in the first step to train a fully connected neural network. The network is optimized to learn the mapping between the waveguide spacing, coupling length, and input frequency to the power fraction in the two output waveguides. We refer to this network as a surrogate solver because we can now use it as an approximate substitute for the full electromagnetic simulation. The final step of the optimization uses this surrogate solver inside of a Bayesian optimization routine to identify a more optimal set of parameters for the directional coupler. With this set of parameters, we can use tidy3d to run a final verification of the design and evaluate the fidelity of the surrogate solver when compared to ground truth simulation results. The general flow of the notebook is shown in the diagram below.
Cell 27, Line 62: 'freatures'
  > # Remove training freatures like dropout for the evaluation section and then turn it back on for training

DistributedBraggReflectorCavity.ipynb:

Cell 12, Line 9: 'thicness'
  > t_2 = lda0 / (4 * n_2)  # thicness of the second material

EMEBends.ipynb:

Cell 6, Line 14: 'wvgIn'
  > """

EulerWaveguideBend.ipynb:

Cell 8, Line 2: 'increasement'
  > precision = 0.05  # increasement of L_max at each iteration
Cell 22, Line 5: 'straght'
  > # add points to include the input and output straght waveguides

FresnelLens.ipynb:

Cell 18, Line 1: 'mins'
  > Even though the simulation domain is huge, running the simulation with Tidy3D only takes mins.

GDSImport.ipynb:

Cell 8, Line 12: 'demosntrate'
  > # Create a library for the cell and save it, just so that we can demosntrate loading

GeometryTransformations.ipynb:

Cell 21, Line 1: 'cen'
  > The `ClipOperation` class cen be used directly to perform the same operations, if desired:

HighQSi.ipynb:

Cell 5, Line 6: 'silcon'
  > t = 260 * nm  # thickness of silcon

LowContrastWaveguide.ipynb:

Cell 6, Line 1: 'ploting'
  > # ploting the simulation domain

Metalens.ipynb:

Cell 32, Line 1: 'intensites'
  > # and let's plot the intensites as well

MidIRMetalens.ipynb:

Cell 28, Line 1: 'FlexCredicts'
  > Before submitting large simulations to the server, it's always a good practice to estimate the cost first to avoid accidentally wasting your FlexCredicts.

NanobeamCavity.ipynb:

Cell 27, Line 3: 'ResonaceFinder'
  > Next, we will collect the data for the point field monitors and use the `ResonaceFinder` plugin that implements the harmonic-inversion algorithm, which is a convenient technique to analyze exponential decaying fields, allowing us to get Q-factor information with a relatively short simulation time.

NanostructuredBoronNitride.ipynb:

Cell 17, Line 21: 'visiualize'
  > # visiualize the cross section of the simulation domain
Cell 32, Line 14: 'visiualize'
  > # visiualize the cross section of the simulation domain

ParticleSwarmOptimizedPBS.ipynb:

Cell 4, Line 1: 'Preparational'
  > ## Preparational Work Before the PSO

PlasmonicNanoparticle.ipynb:

Cell 1, Line 3: 'permittivty'
  > Plasmonic nanoparticles can exhibit interesting electromagnetic properties at certain frequencies, such as a negative real part of the relative permittivty. Due to their high electrical conductivity, gold nanoparticles can be challenging to model: the rapid field variations inside and near the particles require a fine local discretization. Therefore, an intelligent non-uniform meshing scheme is essential to make sure that the particle is well resolved, while ensuring that the empty space around it does not lead to wasted simulation effort.

PlasmonicPhotothermalHeating.ipynb:

Cell 7, Line 6: 'marged', 'nananorods'
  > # building nananorods. One cylinder, two ellipse made out of spheres, marged with union.
Cell 66, Line 19: 'Temperarature'
  > colorbar_label = "Temperarature C°"
Cell 68, Line 19: 'Temperarature'
  > colorbar_label = "Temperarature C°"
Cell 71, Line 38: 'Temperarature'
  > colorbar_label = "Temperarature difference"
Cell 71, Line 41: 'Temperarature'
  > colorbar_label = "Temperarature difference"

RadiativeCoolingGlass.ipynb:

Cell 11, Line 7: 'freqeucny'
  > freqs = np.linspace(freq_start, freq_end, 100)  # freqeucny range of the simulation

SMatrix.ipynb:

Cell 37, Line 1: 'couping'
  > # assert that the horizontal couping elements are exactly equal
Cell 38, Line 2: 'paramteter'
  > Finally, to exclude some rows of the scattering matrix, one can supply a `run_only` paramteter to the `ComponentModeler`.

SelfIntersectingPolyslab.ipynb:

Cell 9, Line 1: 'polyslabsl'
  > We can obtain the division result in the form of a list of simple polyslabs, or combined into a `GeometryGroup`. As shown below, the entire polyslab will be divided into 3 simple polyslabsl

VortexMetasurface.ipynb:

Cell 10, Line 32: 'anthenas'
  > # create a dictionary to define the parameters of the anthenas in each octante
Cell 27, Line 1: 'gaussiam'
  > # gaussiam beam function
Cell 27, Line 24: 'gaussiam'
  > # creating the gaussiam beam field

WaveguideBendSimulator.ipynb:

Cell 11, Line 12: 'increasement'
  > precision = 0.05  # increasement of L_max at each iteration
Cell 19, Line 63: 'bendwidth'
  > # add a label and a input box for bendwidth
Cell 19, Line 64: 'Bendwidth'
  > bw_label = tk.Label(root, text="Bendwidth (nm):", bg="white")

WaveguideGratingAntenna.ipynb:

Cell 13, Line 22: 'defome'
  > # defome a mode solver

WaveguideSizeConverter.ipynb:

Cell 12, Line 1: 'waveguied'
  > w_in = 10  # input waveguied width
Cell 38, Line 2: 'lienar'
  > sim_data_linear = batch_results["L_t=50"]  # simulation of the 50 um lienar taper

WebAPI.ipynb:

Cell 2, Line 4: 'dont'
  > # set logging level to ERROR because we'll only running simulations to demonstrate the web API, we dont care about the results.
Cell 6, Line 7: 'dont'
  > # monitor the simulation, dont move on to next line until completed.

WidebandBeamSteerableReflectarrayWithPRUC.ipynb:

Cell 3, Line 39: 'resoluion'
  > dl_hole = 0.05 * mm  # grid resoluion around ground plane holes

ZeroCrossTalkTE.ipynb:

Cell 37, Line 1: 'validifies'
  > Apply the same visualization to the simulation data. We can see that the crosstalk is much larger in the bare strip waveguide case, around -10 dB. In the field distribution plot, a noticeable amount of energy is coupled to the lower waveguide. This comparison further validifies the effectiveness of the anisotropic metamaterial cladding design for crosstalk suppression.

Checked 196 notebook(s). Found spelling errors in 47 file(s).

@frederikschubertflex
Copy link
Contributor Author

You can run the LLM mode by setting the GEMINI_API_KEY environment variable and running ./spellcheck.py *.ipynb -i --llm. This takes a few minutes for all notebooks if no dictionary exists. After the script is done, we can check the additions to the dictionary for hallucinations and errors.

@frederikschubertflex
Copy link
Contributor Author

@yaugenst-flex this is ready for re-review 😊

Copy link
Contributor

@yaugenst-flex yaugenst-flex left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @frederikschubertflex this looks great, I don't really have anything to add. I guess the next step would be to fix the typos? 😄

@frederikschubertflex
Copy link
Contributor Author

Great! 👍 yes, I will open a PR today for the typos.

@frederikschubertflex frederikschubertflex merged commit 8c74d48 into develop Jun 26, 2025
1 check passed
@yaugenst-flex yaugenst-flex deleted the frederikschubertflex/improve-spellcheck branch June 27, 2025 07:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants