In US universities, the freshman and sophomore courses are computational, calculus, differential equations, maybe matrices, and the junior/ senior level ones more theoretical, abstract algebra, analysis, linear algebra with vector spaces, so this course tries to prepare students for that leap in abstraction.
I taught a one semester course like this several times. Since the students did not know about formal proofs, it moved pretty slowly, but still flummoxed most students. It was for math students, so basically needed to prepare them for courses in both abstract algebra and analysis.
It proved essentially impossible, or at least I never managed, to prepare them for both abstract algebra/number theory, and analysis/geometry in one semester. Hence I taught a baby course in algebra/number theory, treating well ordering, prime factorization, the binomial theorem, modular arithmetic, and some elementary properties of polynomials, like the root/factor theorem and rational roots theorem. I thought we should have had another semester course giving a baby treatment of some properties of functions, and real numbers.
Even with the narrow focus, it was very hard going. Teaching proofs is really hard to students who have been spared them in all prior courses. We had a discussion one day e.g. on whether the street sign saying the right lane was for bicycles meant "if you are on a bicycle, you must be in the right lane", or whether it meant "if you are in the right lane, you must be on a bicycle", or both, and what the differences were.
Here are some comments I made to myself as I taught the course one year.
" I have spent almost the whole month trying to get the class to do these two things:
1) when faced with a statement to prove, to try asking what would go wrong if it were false? i.e. to try proof by contradiction.
2) when assuming a statement about natural numbers is false for some natural numbers, to conclude it must fail for a smallest one, i.e. to use well ordering.
I have not succeeded at either.
The other thing I have tried to do is to get the class to attempt to prove at home, some statements I have given them in class. Very few seem to have even tried this, and even fewer are willing to admit it and show us what they have come up with.
Oh well, its a (slow) process."
So my idea for the course was to present some rules of logic, some techniques of proof, and then some elementary theorems whose proofs use the given technique. Remember, if they are going to make a successful proof by contradiction, first they have to know how to contradict a statement, so basic logic comes first, but should not be the whole course. Books on theory of proving, but that do not engage with actual interesting theorems, are the wrong approach in my view. I advocate logic, proof techniques, and then application of these to baby versions of the courses they are preparing for. Ideally one gets to an interesting application, such as applying elementary number theory to public key cryptography. Baby theorems in analysis might include why every bounded increasing sequence must converge, and perhaps that a bounded increasing function is Darboux integrable.
The hard part is teaching them to think and ask why?. Most students think that "learning proofs" means memorizing the steps of specific proofs, without reasoning about what the steps mean. It is big progress if they learn that to show something is a doodad, one should begin with the definition of a doodad, and then state what specifically has to be checked in the current instance. Good luck!