Many modern programming languages fit in a category called "scripting languages." These languages are especially flexible, and they allow a programmer to quickly assemble pieces of a program to solve a problem. Unfortunately, a scripting language's flexibility can also hinder the programmer's ability to develop and maintain a script when it grows into a larger program. As scripting languages have become more popular, especially with new programmers, long-term development and maintenance problems affect a growing body of programs at many layer of our computing infrastructure. This project is about smoothing the path from scripts to a more rigorous style of programming by introducing type systems into scripting languages. A type system can offer up-front guarantees about how a program will execute, and it can help isolate the effects of program modifications. Rather than imposing a particular type system, however, this project's goal is to explore a particular way of defining and customizing a type system while introducing it gradually into an existing program. The specific technical approach in this project builds on Lisp-style macros as provided by the PLT Scheme programming language.